IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Perfectionnement d'un programme ?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 62
    Par défaut Perfectionnement d'un programme ?
    Bonjour,

    Dans le cadre de ma formation en autodidacte sur JAVA, j'aimerais vos conseils sur un programme que je viend de créer suite à un TP mais qui lui présente beaucoup de défaut a mon goût

    Donc je cherche des personnes motivées pour voir ce qui semble améliorable au sein de ma programmation voir même une éventuelle modification complète mais vraiment en dernier secours !

    Le but étant bien sûr de voir mes propres fautes commises ou amélioration que j'aurais pu apporter voir d' éventuels bugs / défauts que je n'avais pas remarquer à celui-ci et ainsi partir sur de bonne base !

    Remarque : Je n'ai vu actuellement que 6 chapitres qui se résume à les boucles, les conditions, les variables et opérateurs

    Voici donc le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    import java.util.Scanner;
     
    public class ConvertCelsiusEnFahrenheit {
    	public static void main(String[] args) {
     
    	//initialisation des variables
        char reponse = 'O';
     
    	// Affichage du Titre
     
    	System.out.println(" -------------------------------------------------------");
    	System.out.println("|     CONVERSION DEGRES CELSIUS ET DEGRES FAHRENHEIT     |");
    	System.out.println(" -------------------------------------------------------");
     
    	do{
     
    		Scanner sc1 = new Scanner(System.in);
    		System.out.println("Veuillez indiquer à partir de quelle température, on commence la conversion :");
    		// récupérer ce que vous avez saisi et ensuite de l'afficher
    		String Tdepart = sc1.nextLine();
     
    		Scanner sc2 = new Scanner(System.in);
    		System.out.println("Veuillez indiquer jusqu'à quelle température, on arrête la conversion :");
    		// récupérer ce que vous avez saisi et ensuite de l'afficher
    		String Tmax = sc2.nextLine();
     
    		Scanner sc3 = new Scanner(System.in);
    		System.out.println("Veuillez indiquer le pas de conversion :");
    		// récupérer ce que vous avez saisi et ensuite de l'afficher
    		String Pas = sc3.nextLine();
     
    		Scanner sc = new Scanner(System.in);
    		System.out.println("Si votre imprimante est prête, tapez O, sinon tapez N");
    		String Imprimante = sc.nextLine();
     
    		char ReponseImprimante = Imprimante.charAt(0);
     
    		while(ReponseImprimante != 'O' && ReponseImprimante !='o' && ReponseImprimante != 'N' && ReponseImprimante != 'n')
    		{
    			System.out.println("\nVeuillez suivre les instructions ci-dessous : ");
    			System.out.println("\nSi vous êtes prêt, tapez O, sinon tapez N");
     
    			new Scanner(System.in);
    			System.out.println("\nEst-elle prête ?");
    			String strx = sc.nextLine();
    			System.out.println("Vous avez saisi : " + Tmax.charAt(0));
    			ReponseImprimante = strx.charAt(0);
    		}
    		if (ReponseImprimante == 'O' || ReponseImprimante =='o')	
    			System.out.println("imprimante OK\n");
     
    		else if (ReponseImprimante =='n' || ReponseImprimante =='N' ) {
    			System.out.println("Veuillez préparer votre imprimante ! ");
     
    			while(ReponseImprimante != 'O' && ReponseImprimante !='o')	{
    				Scanner sc10 = new Scanner(System.in);
    				System.out.println("\nSi vous êtes prêt, tapez O");
    				String str10 = sc10.nextLine();
    				ReponseImprimante = str10.charAt(0);
     
    			}
    			System.out.println("imprimante OK\n");
    		}
     
    		System.out.println("  TABLE DE CONVERSION DE CELSIUS / FAHRENHEIT");
    		System.out.println(" -----------------------------------------------");
    		System.out.println("\tCELSIUS \t | \tFAHRENHEIT");
    		System.out.println(" -----------------------------------------------");
     
    		float Vmax = (Float.parseFloat(Tmax)-Float.parseFloat(Tdepart))/Float.parseFloat(Pas) ;
    		// Calcul Aide ---->  25--110/10 = 13.5 (Vmax)    
     
     
     
    		if (Vmax != 0 ) {
    		do{
    			double Fahrenheit = ( ( 9*  Float.parseFloat(Tdepart)) / 5 ) + 32;
    			Fahrenheit = arrondi(Fahrenheit, 2);// pour 2 chiffres après la virgule... etc.
    			System.out.println("\t "+Tdepart+" \t\t | \t   "+Fahrenheit);
    			float test = Float.parseFloat(Tdepart) + Float.parseFloat(Pas) ;
    			// Calcul Aide ----> (test)  15 = 25 - 10
    			Tdepart =  String.valueOf(test);
    		}while(--Vmax >= 0);
     
    		}
     
    		else	
    			System.out.println("Aucune conversion a effectuer");
     
    		System.out.println("\nSouhaitez-vous éditer une autre table ?(O/N)");
    	    reponse = sc.nextLine().charAt(0);
     
    	}while(reponse == 'O' || reponse =='o');
     
     
    	System.out.println("A bientôt");
    	}
     
    	public static double arrondi(double A, int B) {
    	     return (double) ( (int) (A * Math.pow(10, B) + .5)) / Math.pow(10, B);
    	}
     
     
    }

    En espérant avoir quelque candidat malgré je ne sais pas trop si se genre de manipulation / pratique ce fait sur le forum


    Merci d'avance en tout cas a ceux qui me fourniront une aide

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Déjà ça ne semble pas fonctionner correctement,

    Voila la sortie que j'ai eu avec 50 à 100 par palier de 10 :

    -----------------------------------------------
    CELSIUS | FAHRENHEIT
    -----------------------------------------------
    50 | 212.0
    60.0 | 212.0
    70.0 | 212.0
    80.0 | 212.0
    90.0 | 212.0
    100.0 | 212.0

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 62
    Par défaut
    Désoler j'avais fait une petite mise a jour avant de me coucher mais visiblement je l'ai fait trop rapidement j'avais oublier de changer une variable

    Ressayez la ça fonctionne

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Le voici un peu plus évolué. Plus de méthodes pour écrire moins de code et l'utilisateur est obligé de saisir un nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    import java.text.DecimalFormat;
    import java.util.Scanner;
     
    public class ConvertCelsiusEnFahrenheit {
     
    	public static void main(String[] args) {
     
    		boolean continueConversion = true;
     
    		do {
     
    			System.out.println("\n\n");
    			System.out.println(" -------------------------------------------------------");
    			System.out.println("     CONVERSION DEGRES CELSIUS ET DEGRES FAHRENHEIT");
    			System.out.println(" -------------------------------------------------------");
     
    			double depart = 0;
    			double fin = 0;
    			double step = 0;
     
    			String response = null;
     
    			do {
    				System.out.println("\nVeuillez indiquer la température de départ :");
    				response = getResponse();
    				if (!isDouble(response)) {
    					System.err.println("veuillez saisir un nombre");
    				}
    			} while (!isDouble(response));
     
    			depart = Double.parseDouble(response);
     
    			do {
    				System.out.println("\nVeuillez indiquer la température de fin :");
    				response = getResponse();
    				if (!isDouble(response)) {
    					System.err.println("veuillez saisir un nombre");
    				}
    				else if (Double.parseDouble(response) < depart) {
    					System.err.println("veuillez saisir un nombre plus grand ou égal à la température de départ");
    				}
    			} while (!isDouble(response) || Double.parseDouble(response) < depart);
     
    			fin = Double.parseDouble(response);
     
    			if (!(depart == fin)) { // si egal il n'y a pas d'utilité à demander le pas
    				do {
    					System.out.println("\nVeuillez indiquer le pas de conversion :");
    					response = getResponse();
    					if (!isDouble(response)) {
    						System.err.println("veuillez saisir un nombre");
    					}
    				} while (!isDouble(response));
    			}
    			step = Double.parseDouble(response);
     
    			System.out.println("\n TABLE DE CONVERSION");
    			System.out.println(" ---------------------");
    			System.out.println(" CELSIUS\tFAHRENHEIT");
    			System.out.println(" ---------------------");
     
    			for (double celcius = depart ; celcius <= fin ; celcius = celcius + step) {
    				double fahrenheit = celciusToFarhenheit(celcius);
    				System.out.println(" " + arrondi(celcius, 2) + " °C\t " + arrondi(fahrenheit, 2) + " °F");
    			}
     
     
    			System.out.println("\nAutre conversion (\"o/O/y/Y\" pour continuer) :");
    			response = getResponse().toLowerCase();
    			if (!response.equals("o") && !response.equals("y")) {
    				continueConversion = false;
    			}
     
    		} while (continueConversion);
     
    	}
     
    	private static double celciusToFarhenheit(double celcius) {
    		return celcius * 1.8 + 32;
    	}
     
    	private static boolean isDouble(String s) {
    		try {
    			Double.parseDouble(s);
    			return true;
    		} catch (NumberFormatException e) {
    			return false;
    		}
    	}
     
    	private static String getResponse() {
    		Scanner sc = new Scanner(System.in);
    		String response = sc.nextLine();
    		return response;
    	}
     
    	private static String arrondi(double d, int n) {
    		double p = Math.pow(10.0, n);
    		double r = Math.floor((d * p) + 0.5) / p;
    		DecimalFormat df = new DecimalFormat("0.00");
    		return df.format(r);
    	}
     
    }

    Si ça peut t'aider...

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 62
    Par défaut
    Effectivement ça a l'air pas mal mais un nombre incalculable de fonction ou je ne sais quoi que je n'ai encore jamais vu

    Ex :

    import java.text.DecimalFormat;

    try {

    } catch

    Et bien d'autre mais merci pour un autre exemple ça me permet de me rendre compte a quel point le nombre de solution peut varier en fonction des programmateurs j'imagine et c'est bien ce que je redouter

  6. #6
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    DecimalFormat permet d'afficher le nombre avec 2 chiffre après la virgule quoi qu'il arrive. C'est juste pour la présentation :
    2 -> 2.00
    2.151 -> 2.15
    45.1 -> 45.10

    Pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
    			Double.parseDouble(s);
    			return true;
    		} catch (NumberFormatException e) {
    			return false;
    		}
    Va voir du côté des Exceptions.

    Double.parseDouble(s); permet d'essayer de parser la String en double. Si il y arrive il passe à la ligne suivante et fait return true. La fonction indique donc que la chaine String s est bien un nombre. Si il n'a arrive pas, il passe directement dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch (NumberFormatException e) {
    	return false;
    }
    Et là il renvoie false.

    @+

    PS : on dit programmeur, programmateur c'est dans les machines à laver

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/10/2013, 15h13
  2. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  3. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  4. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo