Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de débutant

Sujet résolu
    19 avril 2009 à 13:54:21

    Salut à tous,

    Je viens de commencer le java, donc comme tout langages de programmation j'effectue tout plein de tests ^^.
    Mais là jee trouve pas mon erreur, Eclipse ne la trouve pas non plus, je pense que c'est à cause d'une exception (mais je sais pas encore ce que c'est).
    Un coup d'oeil :
    import java.util.Scanner;
    
    public class test {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		char reponse = 'O';
    		int nbre = 50;
    		Scanner sc = new Scanner(System.in);
    		do
    		{
    			System.out.println("Saissisez un nombre :");
    			int rep = sc.nextInt();
    			if(nbre < rep)
    				System.out.println("C'est moins !");
    			else if(nbre > rep)
    				System.out.println("C'est plus !");
    			
    			if(rep == nbre)
    			{
    				System.out.println("Bravo !");
    				System.out.println("Voulez vous continuer ?(O/N)");
    				reponse = sc.nextLine().charAt(0);
    				
    			}
    		}while(reponse == 'O');
    		System.out.print("En revoir ...");
    	}
    
    }
    


    En esperant que quelqu'un trouve une solution ;)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      19 avril 2009 à 14:09:45

      1° La prochaine fois, explicite ton erreur.

      2° Remplace :
      reponse = sc.nextLine().charAt(0);
      

      par :
      reponse = sc.next().charAt(0);
      

      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2009 à 14:20:12

        }while(reponse == 'O');
        


        On fait une comparaison de chaînes de caractères avec la méthode String.equals(String s) :

        }while(reponse.equals('O'));
        


        EDIT : Fin, de manière générale, on fait comme ça, les plus pointilleux apprécieront de me reprendre ;)
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2009 à 14:21:56

          Merci à toi Enax, la prochaine fois je détaillerais un peu plus mon erreur ;)
          Merci Corentin_ je ne connaissais pas cette technique ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            19 avril 2009 à 14:25:37

            Citation : Corentin_

            }while(reponse == 'O');
            



            On fait une comparaison de chaînes de caractères avec la méthode String.equals(String s) :

            }while(reponse.equals('O'));
            



            EDIT : Fin, de manière générale, on fait comme ça, les plus pointilleux apprécieront de me reprendre ;)


            Sauf qu'ici c'est un type char et non String, donc pas de equals. ;)
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2009 à 14:31:18

              Citation : Corentin_

              }while(reponse == 'O');
              



              On fait une comparaison de chaînes de caractères avec la méthode String.equals(String s) :

              }while(reponse.equals('O'));
              



              EDIT : Fin, de manière générale, on fait comme ça, les plus pointilleux apprécieront de me reprendre ;)


              EDIT 2 : voir le commentaire d'Enax, ça m'apprendras à pas lire dans le détail
              • Partager sur Facebook
              • Partager sur Twitter
                19 avril 2009 à 14:33:06

                Il est bien gentil ce zéro :) "Ah j'ai plein d'erreurs dans mon code pourquoi ça marche pas".

                Plus sérieusement, je pense que tu as compris, on aimerait bien ne pas avoir à compiler ton code et à essayer de faire joujou avec. Si tu penses que t'as une erreur dis-nous ce que c'est et pourquoi tu penses que y'en a une.

                Bon ici j'ai dû me taper la compilation de ton code, voilà ce que ça affiche :
                Saissisez un nombre :
                3
                C'est plus !
                Saissisez un nombre :
                50
                Bravo !
                Voulez vous continuer ?(O/N)
                Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
                        at java.lang.String.charAt(Unknown Source)
                        at Test.main(Test.java:26)


                Bon après avoir mis l'erreur ça va mieux.
                Maintenant, je pense que tu aurais pu trouver l'erreur tout seul, étant donné qu'elle a déjà été posée au moins 10 fois sur ce forum.

                En faisant un tour sur la javadoc pour regarder les méthodes nextInt() et nextLine(), on peut lire que nextInt() déplace son curseur juste après le prochain int qu'il rencontre mais sans prendre en compte le retour à la ligne (ben oui il retourne un int) alors que nextLine() place le curseur du Scanner à la fin dès qu'il a trouvé un retour à la ligne, mais sans prendre en compte le retour à la ligne.

                Ce qui se passe ici, c'est que si tu rentres 50, le nextInt() avance le curseur juste avant le caractère de retour de fin de ligne, et comme tu fais un nextLine() juste derrière, le nextLine s'arrête après avoir trouvé le retour à la ligne, et donc il contient une chaîne vide. Et le charAt(0) d'une chaîne vide ça n'existe pas.
                CQFD

                Pour remédier au "problème", y'a plusieurs solutions. Soit tu modifies la présentation de ton code, soit tu rajoutes un nextLine() juste avant de faire nextLine().charAt(0), soit tu captures l'exception...

                Bon courage et n'oublie pas de préciser ton problème la prochaine fois, et éventuellement de rechercher très rapidement si ta question n'a pas déjà été posée (les admins ont fait un super boulot en codant un moteur de recherche très pertinent, faut s'en servir ^^) ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  19 avril 2009 à 14:38:28

                  Merci elmh pour cette explication ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème de débutant

                  × 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