Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu escargots.

Sujet résolu
    26 mars 2015 à 16:50:38

    Bonjour, j'essaye de faire un mini jeu, sur l'avancer de plusieurs escargots. Mais j'obtiens des choses étranges, voici mon code
    public class CinqEscargot{
      public static void main(String[] args){
        int[] tab;
        tab = new int[5];
        int position = 0;
        int num=0;
        while (tab[num] <50){
        for (; num<5; num=num+1){  
          position = MOOC.auSort(1, 6);
          tab[num] = tab[num] + position;
          System.out.println("escargot" + num + " " + tab[num]);
        } 
       }
      }
    }
    
    

    MOOC.auSort(1, 6); est une instruction donné dans un MOOC du CNAM, me permettant d'obtenir un chiffre entre 1 et 6.
    Lorsque je le lance j'obtiens comme réponse

     > run CinqEscargot
    escargot0 5
    escargot1 3
    escargot2 6
    escargot3 6
    escargot4 4
    java.lang.ArrayIndexOutOfBoundsException: 5
        at CinqEscargot.main(CinqEscargot.java:7)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

    Je ne comprends pas, d'où viens mon erreur.

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2015 à 17:06:35

      Salut à toi,

      Ta boucle for va s’arrêter lorsque ta variable num atteint la valeur 5, mais après tu as la boucle while qui prend le relais et effectue donc son test:

      tab[num] < 50 que l'on peut donc traduire par tab[5]<50

      Mais tab[5] n'existe pas vu que c'est un tableau de 5 entiers (de 0 à 4).

      Bonne journée

      • Partager sur Facebook
      • Partager sur Twitter
        29 mars 2015 à 19:10:21

        Merci, je vais voir tout cela.
        • Partager sur Facebook
        • Partager sur Twitter
          30 mars 2015 à 1:24:50

          Bonsoir,

           Quand tu vois ArrayIndexOutOfBoundsException cela veux dire que l'index de ton tableau est hors limite.

          Azourkaï

          -
          Edité par Azourkaï 30 mars 2015 à 1:25:23

          • Partager sur Facebook
          • Partager sur Twitter
          Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide.
            30 mars 2015 à 12:33:23

            Cela doit donc venir de mon while alors? Qui doit donc modifier mon tab[num] de mauvaise manière?
            • Partager sur Facebook
            • Partager sur Twitter
              30 mars 2015 à 14:48:48

              public class CinqEscargot{
              	public static void main(String[] args){
              		int[] tab = new int[5];
              		int position = 0, num=0;
              			    
              		while (tab[0] <50 || tab[1] <50 || tab[2] <50 || tab[3] <50 ||tab[4] <50) {
              	
              			for (num=0; num<5; num++){ 
              				position = MOOC.auSort(1, 6);
              				tab[num] += position;
              				System.out.println("escargot n°" + num + " avance de "+position+"cm, il a parcouru "+tab[num]+"cm.");
              			}
              		}
              	}
              }

              -
              Edité par Azourkaï 30 mars 2015 à 14:50:29

              • Partager sur Facebook
              • Partager sur Twitter
              Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide.
                31 mars 2015 à 10:16:45

                Ok, je te remercie, effectivement avec un while plus complet cela fonctionne mieux.

                merci

                • Partager sur Facebook
                • Partager sur Twitter
                  31 mars 2015 à 10:23:33

                  Si tu veux d'autre explication hésite pas.

                  Et n'oublie pas de mettre le sujet résolu si pour toi c'est ok. 

                  Azourkaï

                  -
                  Edité par Azourkaï 31 mars 2015 à 10:26:49

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide.
                    31 mars 2015 à 11:47:59

                    Ca va avec 5 escargots mais si tu en as 10 ou 100...

                    Et puis il vaut mieux éviter les "nombres magiques" et les remplacer par des constantes. (Un nombre magique est une valeur que tu écris "en dur" dans ton code.). Ici, par exemple, si tu veux changer le nombre d'escargots ou la longueur de la course, galère.

                    Voici une version "améliorée" où j'ai aussi mis des noms de variable un peu plus parlants.

                    public class CinqEscargot{
                    
                        // Nombre d'escargots
                        static final int NB_ESCARGOTS = 5;
                        // Longueur de la course
                        static final int ARRIVEE = 50;
                    
                        public static void main(String[] args){
                            int[] distances = new int[NB_ESCARGOTS];
                            // Deviendra true quand un escargot passe la ligne d'arrivée
                            boolean courseFinie = false;
                            
                            // Tant que la course n'est pas finie...
                            while (!courseFinie) {
                         
                                for (int num = 0; num < NB_ESCARGOTS; num++){
                                    int deplacement = MOOC.auSort(1, 6);
                                    distances[num] += deplacement;
                                    if (distances[num] >= ARRIVEE) // on stoppe la course
                                        courseFinie = true;
                                    System.out.println("escargot n°" + num + " avance de "+deplacement+"cm, il a parcouru "+distances[num]+"cm.");
                                }
                            }
                        }
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 mars 2015 à 13:24:52

                      Merci a tous pour vos réponses.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        22 avril 2015 à 11:06:50

                        Bonjour,

                        je suis le même MOOC. Je me casse la tête sur cet exercice aussi.

                        Il y a un truc que je ne comprend pas c'est que tous les escargots vont devoir passer la ligne d'arrivée pour arrêter le programme.

                        Comment faire pour pour que le programme s'arrête dés qu'il y a un seul escargot qui dépasse les 50 ?

                        Merci pour vos réponses

                        Roundcat

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 avril 2015 à 18:16:49

                          Bonjour !

                          Mais si tu veux effectuer un classement par la suite, comment fait tu si tous les escargots n'ont pas passer la ligne ?

                          Azourkaï

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide.

                          Jeu escargots.

                          × 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