Java.lang.ArrayIndexOutOfBoundsException: 5
Résolu/Fermé3 réponses
luckydu43
Messages postés
3985
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
23 décembre 2024
982
Modifié par luckydu43 le 30/08/2016 à 19:16
Modifié par luckydu43 le 30/08/2016 à 19:16
Bonjour !
J'aurais plutôt vu ça :
C'est tout pour moi ;-)
bonne journée !
Luc
Les 3 plus grands mensonges du dev : 1. La doc ? On la fera plus tard... 2. Le programme a été testé et ne comporte aucun bug... 3. Les spécifications techniques sont finies...
J'aurais plutôt vu ça :
public static void main (String[] args) { final Scanner sc = new Scanner(System.in); System.out.print("Saisir la taille de la liste : "); int nb = sc.nextInt(); int[] toto = new int[nb]; toto[0]=1; // remplacé toto.length-1 par toto.length (on a un < au lieu d'un <=, donc // toto.length ne sera jamais affecté à i for(int i=1 ; i<toto.length ; i++) { // remplacé i++ par j++ // même modif que la première boucle for for(int j=0 ; j<toto.length ; j++) { // TODO : i-1-j donne toujours 0 ;-) toto[i] = toto[i] + toto[j] + toto[i-1-j]; System.out.print(toto[i]+", "); } } }
C'est tout pour moi ;-)
bonne journée !
Luc
Les 3 plus grands mensonges du dev : 1. La doc ? On la fera plus tard... 2. Le programme a été testé et ne comporte aucun bug... 3. Les spécifications techniques sont finies...
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
30 août 2016 à 23:12
30 août 2016 à 23:12
Bonjour,
De manière générale, une "ArrayIndexOutOfBoundsException: x" signifie que l'on a un tableau auquel on accède en faisant
Remarque : je t'invites à bien séparer ton code, en faisant des méthodes intermédiaires, quitte à faire des méthodes de 2 ou 3 lignes seulement.
Cela simplifie le code en séparant bien chaque étape et en clarifiant le rôle de chaque variable (k, n...) pour éviter de se tromper d'indices et générer des dépassements de tableaux.
Exemple :
Pour info : cette suite correspond aux nombres de Catalan
De manière générale, une "ArrayIndexOutOfBoundsException: x" signifie que l'on a un tableau auquel on accède en faisant
[x]alors que
xest soit négatif, soit plus grand que la taille du tableau (ou égal), car seuls les indices de 0 à length-1 sont autorisés.
Remarque : je t'invites à bien séparer ton code, en faisant des méthodes intermédiaires, quitte à faire des méthodes de 2 ou 3 lignes seulement.
Cela simplifie le code en séparant bien chaque étape et en clarifiant le rôle de chaque variable (k, n...) pour éviter de se tromper d'indices et générer des dépassements de tableaux.
Exemple :
public static int produit(int[] u, int k, int n) { return u[k] * u[n - k]; } public static int somme(int[] u, int n) { int s = 0; for (int k = 0; k < n; k++) s += produit(u, k, n-1); return s; } public static int[] suite(int length) { int[] u = new int[length]; u[0] = 1; for (int n = 1; n < length; n++) u[n] = somme(u, n); return u; } public static void affichage(int[] u) { for (int i = 0; i < u.length; i++) System.out.printf("u[%d]=%d\n", i, u[i]); } public static int readInt() { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); return n; } public static void main(String[] args) { System.out.print("Length: "); int length = readInt(); int[] u = suite(length); affichage(u); }
Pour info : cette suite correspond aux nombres de Catalan
30 août 2016 à 19:33
je trouve la même erreur
cette fois celui ci:
Entrez un no5
2, Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Suite.main(Suite.java:27)
Modifié par luckydu43 le 30/08/2016 à 19:49
Refais le Ctrl-C/Ctrl-V dans le doute ^^
... je regarde quand même le code, en attendant ta réponse
EDIT :
Piti test :
Essaie de remplacer l'affectation de variable
par
sinon, toto[j] ne devrait pas marcher.
30 août 2016 à 21:28
rien est changé toujours la même erreur
Entrez un no4
Entrez un no5
Entrez un no9
Entrez un no7
4, Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Suite1.main(Suite1.java:24)
Modifié par luckydu43 le 30/08/2016 à 21:36
Ensuite, relance le main.
Je ne trouve pas l'erreur...