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 :

Algorithme un peu bizarre a mon avis.


Sujet :

avec Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Points : 109
    Points
    109
    Par défaut Algorithme un peu bizarre a mon avis.
    Je suis débutant en programmation java
    j'ai fait ce petit programme qui vient après pour m’exercer histoire d'avoir la main (je pars du principe qu'aucune fonction n'intervient dans le main[ ]: parce que non connue)
    le menu du programme donne les directives pour les unités de distance.
    Mais j'ai l'impression que les traitements (l'algorithme) sont redondants:
    Il n'y aurait-il pas un autre algorithme qui serait plus simple que ça.
    Si vous découvrez aussi des bugs dans celui-ci dites le moi avant de me proposer le changement 'algorithme.
    CODE SOURCE:
    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
    105
    106
     
     
    package test;
     
    import java.util.Scanner;
     
    /**
     *
     * @author free_01_binairy
     * C'est un programme qui convertit des distances en une autre (km,m,cm)
     * juste ces trois unites de distance.
     */
    public class Test {
     
     
        public static void main(String[] args) {
            // TODO code application logic here
          System.out.println("CE PROGRAMME CONVERTIT DES DISTANCES");
     
          System.out.println( "\n");
          System.out.println("* *************************************************************** *");
          System.out.println("* *************************************************************** *");
          System.out.println("* *                                                                            * *");
          System.out.println("* *                 VOICI LE MENU                                  * *"); 
          System.out.println("* *                    1:km                                                * *");
          System.out.println("* *                    2:m                                                  * *");
          System.out.println("* *                    3:cm                                                * *");
          System.out.println("* *************************************************************** *");
          System.out.println("* **************************************************************  *");
     
           /*
          1m = 100cm // 1cm= 0.01;
          1km = 1000m //1m= 0.001m
          1km = 100000cm //1cm= 0.00001km
          */
     
         Scanner sc= new Scanner(System.in) ;
     
         System.out.println("Saisissez le nombre a convertir:");
         float num = sc.nextFloat(); 
         while(num!=0){ //Une facon d'echaper aux chaines de caracteres ou aux caracteres.
          sc.nextLine();
     
         System.out.println("Donnez son unite correspondant:");
         int from = sc.nextInt();
         sc.nextLine();
     
          System.out.println("Convertir en:");
         int to = sc.nextInt();
            switch (from) {
                 case 1:
                     switch(to){
                         case 1:
                         System.out.println(num+ " km") ;
                             break;
                         case 2:
                             System.out.println(num*1000+" m");
                             break;
                         case 3:
                             System.out.println(num*100000+" cm");
                             break;
                         default:
                             System.out.println("Unite non prise en charge");
                        return ;     
     
                     }
                 break;
                 case 2:
                      switch(to){
                         case 1:
                         System.out.println(num*0.001+" km") ;
                             break;
                         case 2:
                             System.out.println(num+" m");
                             break;
                         case 3:
                             System.out.println(num*100+" cm");
                             break;
                         default:
                             System.out.println("Unite non prise en charge");
                          return;   
                      }
                  break;
                 case 3:
                      switch(to){
                         case 1:
                         System.out.println(num*0.00001+" km") ;
                             break;
                         case 2:
                             System.out.println(num*0.01+" m");
                             break;
                         case 3:
                             System.out.println(num+" cm");
                             break;
                         default:
                             System.out.println("Unite non prise en charge");
                         return;    
                      }
                 default:
                     System.out.println("Unite non prise en charge");
     
            }
            return;  
           }
        }               
    }
    Merci de contribution.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ton problème, c'est l'interfaçage. C'est un soucis courant en programmation. Il faut s'approprier les données d'entrées en contrôlant leur format. Il faut considérer que tout ce qui vient de l'extérieur peut être faux et modifier les données selon notre propre convenance, sans que cela ne soit dictée de l'extérieur.
    Voici une possibilité de code modifié, un peu plus court que le tient et surtout sans redondance :
    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
    import java.util.Scanner;
     
    /**
     *
     * @author free_01_binairy C'est un programme qui convertit des distances en une
     *         autre (km,m,cm) juste ces trois unites de distance.
     */
    public class Convertir
    {
    	public static void main( String[] args )
    	{
    		// TODO code application logic here
    		System.out.println( "CE PROGRAMME CONVERTIT DES DISTANCES" );
     
    		System.out.println( "\n" );
    		System.out.println( "* *************************************************************** *" );
    		System.out.println( "* *************************************************************** *" );
    		System.out.println( "* *                                                                            * *" );
    		System.out.println( "* *                 VOICI LE MENU                                  * *" );
    		System.out.println( "* *                    1:km                                                * *" );
    		System.out.println( "* *                    2:m                                                  * *" );
    		System.out.println( "* *                    3:cm                                                * *" );
    		System.out.println( "* *************************************************************** *" );
    		System.out.println( "* **************************************************************  *" );
     
    		/*
    		 * 1m = 100cm // 1cm= 0.01; 1km = 1000m //1m= 0.001m 1km = 100000cm
    		 * //1cm= 0.00001km
    		 */
     
    		Scanner sc = new Scanner( System.in );
     
    		System.out.println( "Saisissez le nombre a convertir:" );
    		float num = sc.nextFloat();
    		while( num != 0 )
    		{ // Une facon d'echaper aux chaines de caracteres ou aux caracteres.
    			sc.nextLine();
     
    			System.out.println( "Donnez son unite correspondant:" );
    			int from = sc.nextInt();
    			sc.nextLine();
     
    			switch( from )
    			{
    				case 1: num *= 1000; break;
    				case 2: break;
    				case 3: num /= 100; break;
    				default:
    					System.out.println("Unite non prise en charge");
    					return;
    			}
     
    			System.out.println( "Convertir en:" );
    			int to = sc.nextInt();
    			switch( to )
    			{
    				case 1: System.out.println( num / 1000 + " km" ); break;
    				case 2: System.out.println( num + " m" ); break;
    				case 3: System.out.println( num * 100 + " cm" ); break;
    				default:
    					System.out.println( "Unite non prise en charge" );
    					return;
    			}
    		}
    	}
    }
    Le principe : la valeur entrée est convertie depuis son unité vers le mètre. Cette unité est arbitraire, n'importe quelle autre unité est possible.
    Ensuite, selon le choix de l'utilisateur, cette valeur en mètre est convertie dans l'unité d'arrivée.

    Pour l'interfaçage, il n'y a pas de règle universelle. Par exemple, dans ma façon de faire, il y a deux calculs : conversion en mètre puis conversion dans le format d'arrivé. Alors que ton programme ne faisait qu'un seul calcul. Par contre mon code est beaucoup plus court et il est facile d'ajouter une autre unité de conversion : il faudra en gros ajouter deux lignes : la première pour la conversion de X vers mètre et la seconde pour la conversion de mètre vers X. Par contre, dans ton code, ajouter une nouvelle unité c'est doubler la taille du code car tu effectues toutes les combinaisons !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Points : 109
    Points
    109
    Par défaut
    Ton algorithme est plus clair surtout plus court ce qui permet de comprendre facilement,
    et aussi de pouvoir l’étendre a d'autres unités sans beaucoup d’écriture de code.

    Merci énormément ...

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

Discussions similaires

  1. Comportement bizarre de mon navigateur ...
    Par hisy dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 30/01/2006, 11h22
  2. premier pas... un peu bizarre
    Par gaia-harastra dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 10/01/2006, 09h00
  3. Process defunct bizarre avec Mon sur mandriva
    Par spynux dans le forum Administration système
    Réponses: 4
    Dernier message: 22/12/2005, 09h32
  4. [CSS] float un peu bizarre sous FF.
    Par elraton dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/10/2005, 18h59
  5. Requete sql un pti peu bizarre
    Par lamoufle dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2005, 08h39

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