Partage
  • Partager sur Facebook
  • Partager sur Twitter

Portion de code négligée

Sujet résolu
    24 janvier 2015 à 23:26:30

    Avant tout, bonjour (ou bonsoir) à tous !

    Récemment, j'ai décidé de me mettre à l'apprentissage de Java.
    N'y connaissant rien, j'ai suivi les bases et est confronté à deux problèmes.

    En effet, je constate que mon programme néglige certaines parties et passe aux suivantes sans aucun souci apparent.

    Les parties en question sont les deux while.

    Voici le code (J'utilise Eclipse) :

    import java.util.Scanner;
    
    /**
     * @author OLCProg
     *
     */
    
    public class programBorne {
      public static void main(String[] args){
    
    	  String nameTab[][] = {{"16840", "18380", "17890"},{"Benjamin Fleuriault", "Paul Robin", "Grégoire Dugast"}};
    	  double prixTab[][] = {{16840, 18380, 17890},{42.42, 129.45, -12.21}};
    	  
    	  byte i = 0;
    	  byte j = 0;
    	  double idDbCarte;
    	  int lignesTabOne = nameTab.length;
    	  int lignesTabTwo = prixTab.length;
    
    	  	Scanner sc = new Scanner(System.in);
    	  	System.out.println("Please enter your ID.");
    	  	String idStrCarte = sc.nextLine();
    	  	System.out.println("You typed " + idStrCarte);
    	  	
    	  	System.out.println("We're searching for your ID in the data base.");
    	  	
    	while (i <= lignesTabOne);
    	{
    		if (idStrCarte == nameTab[0][i])
    			System.out.println("Your ID is recognized");
    	  	
    	  	else;
    	  		i += 1; 	
    	}
    
    	  	System.out.println("Hello " + nameTab[1][i] + ".");
    		idDbCarte = Double.parseDouble(idStrCarte);
    	  	
    		System.out.println("We're analysing your account, please wait.");
    
    	while (j <= lignesTabTwo);
    	{
    		if (idDbCarte == prixTab[0][j])
    	  		System.out.println("There is " + prixTab[1][j] + "euros left on your account.");
    	  		
    	  	else;
    	  		j += 1; 	
    	}
    	  
    	  sc.close();
    	  
      }       
    }

    Et le message de la console :

    Please enter your ID.

    18380

    You typed 18380

    We're searching for your ID in the data base.


    Et c'est tout, rien de plus.

    Si vous avez besoin de plus d'informations, je vous les donnerai volontiers.

    En l'

    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2015 à 23:47:12

      Salut,

      Ton programme ne "saute" pas de parties du code, il est simplement bloqué dans une boucle infinie qui ne fait rien, sans moyen d'en sortir.

      L'erreur viens du fait que tu aies ajoutés des ; à des endroits où il n'en faut pas :

      while (i <= lignesTabOne);
      {
         if (idStrCarte == nameTab[0][i])
            System.out.println("Your ID is recognized");
         else;
            i += 1;    
      }

      En fait ton while(i<= lignesTabOne); ça équivaut à ça :

      while(i<= lignesTabOne) {
      
      }

      C'est à dire une boucle infinie qui ne fait rien, le programme n'a AUCUNE chance de sortir de la boucle.

      Une fois ce ; retiré, tu dois enlever celui du else, parce que c'est la même chose, else; ça veut dire "sinon: on fait rien".

      Pour finir i<=lignesTabOne peut lever une java.lang.ArrayIndexOutOfBoundsException puisque tu vas trop loin dans le parcours du tableau.

      Pour rappel, les indices d'un tableau vont de 0 à <taille-1>. Pour un tableau de taille 4 le dernier indice est 3 (Soit : 0 ; 1 ; 2 ; 3 ce qui fait bien 4 cases). C'est donc i< lignesTabOne.

      Enfin i+= 1 peut s'écrire de façon abrégée i++ (mais ça c'est du détail)

      Ce qui donne ceci :

      while (i < lignesTabOne) {
      	if (idStrCarte == nameTab[0][i])
      		System.out.println("Your ID is recognized");
      	else i++;
      }

      Après une autre remarque, si on entre un ID qui ne correspond à rien, on est reconnu comme 'Grégoire Dugast' puisque c'est le dernier dans le tableau. Tu devrais donc ajouter un boolean trouve qui indique si l'ID a été trouvé, dans le cas contraire afficher un message d'erreur par exemple.

      Bien évidemment les remarques sur le 1er while sont valables sur le 2e.

      -
      Edité par Letalkram 24 janvier 2015 à 23:49:04

      • Partager sur Facebook
      • Partager sur Twitter
      :(){ :|:& };:
        25 janvier 2015 à 14:40:57

        Effectivement je me suis senti con après avoir lu ton message xD

        Merci beaucoup pour ton aide, ça fait plaisir de voir une communauté aussi active ;)

        • Partager sur Facebook
        • Partager sur Twitter
          25 janvier 2015 à 17:38:51

          merci de clore le sujet en haut à droite du premier post
          • Partager sur Facebook
          • Partager sur Twitter
          Un homme azerty en vaut deux.
            25 janvier 2015 à 19:43:18

            Je l'ai volontairement laissé ouvert dans le cas où je rencontrerais un autre problème...

            ...et c'est justement le cas.

            Le programme fonctionne (quasiment) comme voulu sauf que je suis tout le temps identifié en tant que 'Grégoire Dugast' alors que l'ID est bon et le prix restant aussi. (Bon il n'affiche pas le premier while aussi mais ça c'est pas très grave)

            import java.util.Scanner;
            
            /**
             * @author OLCProg
             *
             */
            
            public class programBorne {
              public static void main(String[] args){
            
            	  String nameTab[][] = {{"16840", "18380", "17890"},{"Benjamin Fleuriault", "Paul Robin", "Grégoire Dugast"}};
            	  double prixTab[][] = {{16840, 18380, 17890},{42.42, 129.45, -12.21}};
            	  
            	  int i = 0;
            	  int j = 0;
            	  double idDbCarte;
            	  int lignesTabOne = nameTab.length;
            	  int lignesTabTwo = prixTab.length;
            
            	  	Scanner sc = new Scanner(System.in);
            	  	System.out.println("Please enter your ID.");
            	  	String idStrCarte = sc.nextLine();
            	  	System.out.println("You typed " + idStrCarte);
            	  	
            	  	System.out.println("We're searching for your ID in the data base.");
            	  	
            	while (i < lignesTabOne) 
            	{
            		if (idStrCarte == nameTab[0][i]) 
            			System.out.println("Your ID is recognized");
            	  	else i++; 	
            	}
            	
            			idDbCarte = Double.parseDouble(idStrCarte);
            			System.out.println("We're analysing your account.");
            
            	while (j < lignesTabTwo) 
            	{
            		if (idDbCarte == prixTab[0][j])
            		{
            			System.out.println(nameTab[1][i] + ", there is €" + prixTab[1][j] + " left on your account.");
            			break;
            		}
            		else j++;	
            	}
            	
            	  sc.close();
            	  
              }       
            }

            Et la console :

            Please enter your ID.

            18380

            You typed 18380

            We're searching for your ID in the data base.

            We're analysing your account.

            Grégoire Dugast, there is €129.45 left on your account.

            Vous devez sûrement vous écraser la tête contre le clavier en voyant les erreurs (et j'en suis désolé) mais je ne comprend vraiment pas...

            • Partager sur Facebook
            • Partager sur Twitter
              25 janvier 2015 à 19:53:05

              Salut,

              C'est tout à fait normal, la condition d'arrêt de ton while indique "arrêter quand i est arrivé à la fin du tableau". Cette condition est incomplète : si l'utilisateur a été trouvé il faut s'arrêter avant. C'est ce dont j'avais parlé dans mon précédent message.

              Enfin, pour comparer deux chaînes on utilise equals et pas ==.

              Voici ce que tu pourrais faire :

              boolean found = false;
              while (i < lignesTabOne && !found) {
                 found = idStrCarte.equals( nameTab[0][i] );
                 if (found)
                    System.out.println("Your ID is recognized");
                 else i++;  
              }
              if(!found) // utilisateur non trouvé
                 System.out.println("Your ID does not exists");


              Le while s'arrête donc si on a parcouru tout le tableau OU si on a trouvé l'utilisateur.

              • Partager sur Facebook
              • Partager sur Twitter
              :(){ :|:& };:
                25 janvier 2015 à 20:00:08

                Okay le equals éclaire pas mal de choses :)

                Eh ben merci beaucoup et bonne soirée !

                Sur ce, sujet clos !

                • Partager sur Facebook
                • Partager sur Twitter

                Portion de code négligée

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown