Probléme boucle

Résolu
Bonjour,

bonjour les amis, je suis débutant en JAVA et j'ai pas compris la boucle ci-dessous :
voila le code :
package boucles;

public class PracticeYourKnowledge {

 public static void main(String[] args) {
 
 int tab[]= {10,20,30,40,50,60,70};
 for (int i = 0; i<tab.length; ++i) {
 System.out.println(tab[i]);
 tab[i+3] = 5;
 }
  }
 
 }

et voila le résultat aprés compilation, je veux savoir pourquoi il affiche 5 5 et pas 5 5 5 à la fin pour couvrir tout le tableau avant d'afficher l'erreur :
10
20
30
5
5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at boucles.PracticeYourKnowledge.main(PracticeYourKnowledge.java:10)

Merci d'avance

4 réponses

  1. Modérateur
    Bonjour

    Ca arrivé à la sixième iteration.. tu depasses les bornes de ton tableau.
    (Première itération i=0)
    Ton tableau a une taille de 7.. hors tu fais i+3
    5+3 = 8.. tu es donc en dehors

    edit : oui 4+3 = 7 > à l'indice max tu tableau qui est 6 ( de 0 à 6 = 7 valeurs )

    Cordialement, 
    Jordane                                                                 
    0
    1. Modérateur
      Bonjour,

      "voila le résultat aprés compilation"
      Point de vocabulaire : ce que tu montres c'est le résultat de l'exécution.

      "pourquoi il affiche 5 5 et pas 5 5 5 à la fin (...) avant d'afficher l'erreur"
      La réponse est dans la question : c'est parce qu'il y a eu l'erreur que le programme s'est arrêté après 5 5 et n'a donc pas affiché 5 5 5.

      Il faut décortiquer l'erreur pour en obtenir des informations utiles :
      • PracticeYourKnowledge.java:10
        est la ligne de code qui pose problème, c'est à dire
        tab[i+3] = 5;
        dans ce cas.
      • ArrayIndexOutOfBoundsException: 7
        est la description de l'erreur qui indique que tu essayes d'accéder à la case 7 qui n'existe pas puisque le tableau a des cases numérotées de 0 à 6.

      Je t'invites à afficher l'intégralité de ton tableau à chaque tour de boucle, ça te permettra de mieux suivre les modifications que tu effectues.
      Par exemple avec
      System.out.println(java.util.Arrays.toString(tab));
      0
      1. Jordane45,
        merci pour ta réponse ainsi que KX,
        Jordane 45 ce que je veux comprendre c'est pourquoi il a fait (5+3) qu'à parir de la 5eme itération, une fois 30 affiché ,que se passe il aprés chaque itération, désolé mais je suis un débutant extrême .
        0
        1. Modérateur
          5eme.iteration.. 5+3 ... Tu ne vois pas ?
          Un indice... Le chiffre 5.
          0
        2. Modérateur
          "pourquoi il a fait (5+3) qu'à parir de la 5eme itération, une fois 30 affiché"
          Il n'a jamais fait 5+3, la 5è itération c'est i=4, donc 4+3=7 d'où le message d'erreur ArrayIndexOutOfBoundsException: 7
          Quant au 30 il est affiché à la 3è itération (10, 20, 30) donc il y a eu la 4è itération entre temps (celle qui affichait le premier 5) sans oublier la 5è itération qui plante.

          Pour t'aider à compter il faudrait faire ce que je t'ai indiqué dans mon message d'hier et rajouter des affichages.

          public static void main(String[] args) {
              int tab[]= {10,20,30,40,50,60,70};
          
              for (int i = 0; i<tab.length; ++i) {
                  System.out.println("tab=" + java.util.Arrays.toString(tab));
                  System.out.println("i=" + i);
                  System.out.println("tab[i]="+tab[i]);
                  tab[i+3] = 5;
                  System.out.println("tab=" + java.util.Arrays.toString(tab));
                  System.out.println();
              }
          }
          0
        3. @KXMerci les amis,
          Je pense à zapper ce problème afin d'éviter de vous énerver daventage, peut étre que le temps me portera conseil j'arrive pas à comprendre pkoi il commencé à faire i+3 qu'à partir de 4 et pas à partir de 1.
          j’essaie d'étre curieux afin bien comprendre le langage sachant que j'ai créé moi même ce problème en ajoutant le tab[i+3] = 5;

          Je vous remercie pour votre temps chers.
          0
      2. Modérateur
        Ton tableau contient 7 valeurs (10,20... 70)
        Il a donc une dimension de 6 ( l'indice 0 étant la première valeur.. le dernier indice sera 6 )

        Dans ta boucle.... tu vas de i=0 jusqu'à i=7
        tu affiche la valeur correspondant à l'indice
        10 puis 20 etc...
        Dans un même temps ... tu AFFECTES la valeur 5 à l'indice i+3
        Donc :

        première itération (i=0)
        tu affiches 10
        tu stockes 5 dans tab[3]

        deuxième itération (i=1)
        tu affiches 20
        tu stockes 5 dans tab[4]

        troisième itération (i=2)
        tu affiches 30
        tu stockes 5 dans tab[5]

        quatrième itération (i=3)
        tu affiches la contenu de tab[3] soit 5 (voir première itération)
        et tu stockes 5 dans tab[3+3] =>6

        cinquième itération i = 4
        tu affiches la contenu de tab[4] soit 5 (voir deuxième itération)
        et tu stockes 5 dans tab[4+3] =>7
        étant plus grand que l'indice max de ton tableau... il crache...

        est-ce plus clair ??

        Cordialement, 
        Jordane                                                                 
        0
        1. Merci bcp Jordan,
          Y'a pas plus claire que ça, c'est ce genre de réponse que je voulais avoir justement étant un pure débutant (15 jours seulement) .grand merci
          0