Probléme boucle [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
mercredi 24 novembre 2010
Statut
Membre
Dernière intervention
23 décembre 2018
-
 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

Messages postés
32980
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2021
3 560
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                                                                 
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845
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));
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 .
Messages postés
32980
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2021
3 560
5eme.iteration.. 5+3 ... Tu ne vois pas ?
Un indice... Le chiffre 5.
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845
"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();
    }
}
>
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021

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.
Messages postés
32980
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2021
3 560
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                                                                 

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