Signaler

Probléme boucle [Résolu]

Posez votre question peouts 4Messages postés mercredi 24 novembre 2010Date d'inscription 30 octobre 2017 Dernière intervention - Dernière réponse le 4 nov. 2017 à 03:30 par 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
Utile
+0
plus moins
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                                                                 
Donnez votre avis
Utile
+0
plus moins
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));
Donnez votre avis
Utile
+0
plus moins
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 .
jordane45 18912Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 21 novembre 2017 Dernière intervention - 31 oct. 2017 à 07:04
5eme.iteration.. 5+3 ... Tu ne vois pas ?
Un indice... Le chiffre 5.
Répondre
KX 15031Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 20 novembre 2017 Dernière intervention - 31 oct. 2017 à 11:04
"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();
    }
}
Répondre
peoutss- 1 nov. 2017 à 00:21
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.
Répondre
Donnez votre avis
Utile
+0
plus moins
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                                                                 
walidyahiacherif @gmail.com- 4 nov. 2017 à 03:30
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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !