Probléme boucle

Résolu
peouts Messages postés 11 Statut Membre -  
 walidyahiacherif @gmail.com -
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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  3. peouts
     
    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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      5eme.iteration.. 5+3 ... Tu ne vois pas ?
      Un indice... Le chiffre 5.
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      "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
      1. peoutss > KX Messages postés 19031 Statut Modérateur
         
        Merci 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
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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. walidyahiacherif @gmail.com
       
      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