Partage
  • Partager sur Facebook
  • Partager sur Twitter

Incompréhension usage Scanner

Sujet résolu
    16 juillet 2022 à 20:32:16

    Bonjour, j'ai ici un petit souci.. Je ne comprends absolument pas le problème ^^

    Merci de votre aide ! :)

    public class init {
    	HashMap<String, int []> hashmap = new HashMap<String, int []>();
    	int [] objet1 = new int [2] ; 
    	int [] copie1 = new int[2] ;
    	int tmp0 ;
    	int tmp1 ;
    	String nom ;	
    	String copie ;
    String entree ; public void manuelle (Scanner sc){ System.out.println("Quel nom donner à cet objet ?"); nom = sc.nextLine() ; System.out.print ("Donnez un nombre : "); tmp0 = sc.nextInt(); System.out.print ("Donnez un nombre : "); tmp1 = sc.nextInt(); objet1[0] = tmp0 ; objet1[1]= tmp1 ; hashmap.put(nom, objet1); } public void copier(Scanner sc){ System.out.println("Quel nom donner à cet objet ?"); String nom1 = sc.nextLine(); System.out.println("Quel objet copier ?"); copie = sc.nextLine(); copie1[0] = hashmap.get(copie)[0] ; copie1[1] = hashmap.get(copie)[1] ; hashmap.put(nom1, copie1); } public void afficher (Scanner sc){ System.out.println("Quel objet afficher ?"); entree = sc.nextLine(); System.out.println(entree + " : " + hashmap.get(entree)[0] + "h " + hashmap.get(entree)[1]); } public static void main (String[] args){ init in = new init () ; Scanner sc = new Scanner (System.in); in.manuelle(sc); in.copier(sc); in.manuelle(sc); in.afficher(sc); in.afficher(sc); in.afficher(sc); sc.close(); } }





    Output :

    Quel nom donner à cet objet ?
    objet1
    Donnez un nombre : 12
    Donnez un nombre : 15
    Quel nom donner à cet objet ?
    Quel objet copier ?

    -> Je ne peux pas entrer le nom de cet objet et si j'entre un nouveau nom, l'exécution retourne une exception du fait que cette HashMap(key) n'existe pas, mais ça c'est normal ^^

    -
    Edité par HugoStd 17 juillet 2022 à 15:18:36

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2022 à 20:47:01

      Salut utilises le boutton pour poster ton code. Essaie de lire toi même voir comment c'est disons chiant à lire

      copie1[0] = hashmap.get(copie)[0] ;        copie1[1] = hashmap.get(copie)[1] ;        hashmap.put(nom1, copie1

      A ton avis pour get quelque chose faut qu'il soit put d'abord ou non ?

      D'ailleurs je ne sais pas si c'est parce que tu n'as utilisé le boutton ou non mais la clé de la hashmap est bien une string donc get('copie') pour rester correct 

      -
      Edité par zvheer 16 juillet 2022 à 20:48:42

      • Partager sur Facebook
      • Partager sur Twitter

      yasakani no magatama

        16 juillet 2022 à 21:42:05

        Bonjour,

        Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
        Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

        Pour plus d'informations, nous vous invitons à lire les règles générales du forum

        Merci de colorer votre code à l'aide du bouton Code

        Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: java;">Votre code ici</pre>.

        Merci de modifier votre message d'origine en fonction.

        Liens conseillés

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2022 à 11:35:23

          zvheer a écrit:

          Salut utilises le boutton pour poster ton code. Essaie de lire toi même voir comment c'est disons chiant à lire

          copie1[0] = hashmap.get(copie)[0] ;        copie1[1] = hashmap.get(copie)[1] ;        hashmap.put(nom1, copie1

          A ton avis pour get quelque chose faut qu'il soit put d'abord ou non ?

          D'ailleurs je ne sais pas si c'est parce que tu n'as utilisé le boutton ou non mais la clé de la hashmap est bien une string donc get('copie') pour rester correct 

          -
          Edité par zvheer il y a environ 14 heures


          "copie" est bien une String (cf l. 11) et en effet, pour get, il faut un put avant... Mais d'autre méthodes permette d'ajouter des éléments au Hashmap "manuellement". (Je n'ai pas mis tout le code, puisque tout le reste fonctionne) juste ici je ne comprends pas l'output..

          -
          Edité par HugoStd 17 juillet 2022 à 11:48:44

          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2022 à 12:38:11

            Tu dis avoir une exception 

            l'erreur que tu sors signale clairement que la clé à laquelle tu tentes d'accéder n'est pas défini dans cette hashmap d'où ma question pense tu pouvoir accéder à quelque chose qui n'existe pas

            si tu lis ton code dans son ordre d'exécution à aucun moment tu n'as mis une valeur dans la hashmap qui à la clé copie donc comment veux tu accéder a cette clé ? D'où l'exception key not found 

            • Partager sur Facebook
            • Partager sur Twitter

            yasakani no magatama

              17 juillet 2022 à 13:17:13

              @zvheer

              Oui cette exception est bien normale, mais ce qui n'est pas normal c'est que je n'ai pas l'occasion d'entrer le nom de l'objet à copier...
              Les lignes 8 et 10 sont exécutées et la ligne 9 saute dans l'output, c'est ça que je ne comprends pas..

              PS : je n'ai pas mis la totalité du code, il y a bien un hashmap.put(key, value) avant de faire appel à in.copier()

              • Partager sur Facebook
              • Partager sur Twitter
                17 juillet 2022 à 13:44:42

                Postes donc l'entièreté du code concernant cette partie
                • Partager sur Facebook
                • Partager sur Twitter

                yasakani no magatama

                  17 juillet 2022 à 15:06:12

                  Edit

                  -
                  Edité par HugoStd 17 juillet 2022 à 15:16:33

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 juillet 2022 à 15:10:18

                    ??
                    • Partager sur Facebook
                    • Partager sur Twitter

                    yasakani no magatama

                      17 juillet 2022 à 15:16:49

                      J'ai édité le code et l'output du 1er message :)

                      -
                      Edité par HugoStd 17 juillet 2022 à 15:19:19

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 juillet 2022 à 15:34:29

                        Il faut essayer d'éviter d'éditer les précédents codes postés car ça dénature ce qui aurait pu être dit.

                        Quand à ton soucis

                        remplace ta fonction copier par ceci et essai (tu essaieras aussi de trouver ce qui a changé)

                        public void copier(Scanner sc){
                                System.out.println("Quel nom donner à cet objet ?");
                                sc.nextLine();
                                String nom1 = sc.nextLine();
                                System.out.println("Quel objet copier ?");
                                copie = sc.nextLine();         
                                copie1[0] = hashmap.get(copie)[0] ;
                                copie1[1] = hashmap.get(copie)[1] ;
                                 
                                hashmap.put(nom1, copie1);
                            }



                        • Partager sur Facebook
                        • Partager sur Twitter

                        yasakani no magatama

                          17 juillet 2022 à 15:47:52

                          Ok, j'éviterai ce genre d'édit à l'avenir ;)
                          Ça fonctionne, merci, mais je ne comprends pas pourquoi le Scanner a besoin d'une entrée vide (qui n'appelle pas d'entrée).
                          C'est comme s'il enregistrait une entrée sans qu'il y en ait eu..

                          -
                          Edité par HugoStd 17 juillet 2022 à 15:48:42

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 juillet 2022 à 15:58:57

                            Quand tu lis sur la console tu dois appuyer sur entrée pour récupérer la valeur le soucis est que entrée est aussi l'équivalent du saut de ligne `\n` donc ça reste en attente disons, à ton prochain nextLine il lira donc ce texte qui est resté et va donc sauter ce que toi tu voulais réellement faire.

                            D'où le nextLine pour le consumer 

                            • Partager sur Facebook
                            • Partager sur Twitter

                            yasakani no magatama

                            Incompréhension usage Scanner

                            × 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