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
    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                                                                 
    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
  2. 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 .
    1. Modérateur
      5eme.iteration.. 5+3 ... Tu ne vois pas ?
      Un indice... Le chiffre 5.
    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();
          }
      }
    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.
  3. 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));
    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