J'ai une erreur java.lang.ArrayIndexOutOfBoundsException
Résolu/Fermé
KENZA15A
Messages postés
2
Date d'inscription
jeudi 5 décembre 2013
Statut
Membre
Dernière intervention
1 janvier 2014
-
Modifié par pijaku le 20/12/2013 à 08:47
KENZA15A - 20 déc. 2013 à 02:27
KENZA15A - 20 déc. 2013 à 02:27
A voir également:
- J'ai une erreur java.lang.ArrayIndexOutOfBoundsException
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- J'aime par erreur facebook notification - Forum Facebook
- Java code erreur 1603 ✓ - Forum Windows
2 réponses
tksteph
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
25
7 déc. 2013 à 09:09
7 déc. 2013 à 09:09
ArrayOutOfounds : Suppose que tu essaie d'accéder à une position qui n'existe pas dans un tableau. Tu dois avoir la ligne dans laquelle tu accède à cette position du tableau dans la trace de l'exception.
Conseil: Utilise des variables qui donnent du sens à ce que tu fais, on se perd très vite lorsqu'on commence à lire ton code.
Donc probablement dans l'une de tes boucles, lors d'un accès à un élément d'un tableau, tu n'indique pas la bonne position.
Autre chose: Revois aussi ta manière de créer et initialiser les variables tabx et taby on s'y perd un peu
Conseil: Utilise des variables qui donnent du sens à ce que tu fais, on se perd très vite lorsqu'on commence à lire ton code.
Donc probablement dans l'une de tes boucles, lors d'un accès à un élément d'un tableau, tu n'indique pas la bonne position.
Autre chose: Revois aussi ta manière de créer et initialiser les variables tabx et taby on s'y perd un peu
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 7/12/2013 à 11:59
Modifié par KX le 7/12/2013 à 11:59
Voici un code complet, indenté, avec de la coloration syntaxique, pour qu'on y voie plus clair.
Je ne suis pas sûr qu'il corresponde exactement à ce que tu as fait, j'ai complété les trous comme j'ai pu.
Penses y la prochaine fois que tu postes un code, on n'aime pas jouer aux devinettes, et encore moins lire un code mal mis en forme comme tu l'as fait...
Je ne suis pas sûr qu'il corresponde exactement à ce que tu as fait, j'ai complété les trous comme j'ai pu.
Penses y la prochaine fois que tu postes un code, on n'aime pas jouer aux devinettes, et encore moins lire un code mal mis en forme comme tu l'as fait...
package test; import java.util.Scanner; public class Main { static int nbrclients; static double[] tabx; static double[] taby; static double[] demande = new double[5]; public void tabs() { for (int i = 0; i < nbrclients; i++ ) { Scanner clavier2 = new Scanner(System.in); System.out.println("entrer le numero de client svp");// pour fixer le pointeur du tableau // System.out.println("entrer le numero du client numero : "+(i+1)+" svp"); double x = clavier2.nextDouble(); i = (int) x - 1;// client 1= tab[0] Scanner clavier3 = new Scanner(System.in); System.out.println("entrer l'abcice du client numero : " + (i + 1) + " svp");// pr entrer le x du i eme client tabx[i] = clavier3.nextDouble(); Scanner clavier33 = new Scanner(System.in); System.out.println("entrer l'ordonnée du client numero : " + (i + 1) + " svp");// pr entrer le y du i eme client taby[i] = clavier33.nextDouble(); Scanner dem = new Scanner(System.in);// entrer la demande System.out.println("entrer la demande du client numero : " + (i + 1) + " svp");// pr entrer le y du i eme client demande[i] = dem.nextDouble(); } // afficher les x System.out.println("tab des x : "); for (int i = 0; i < nbrclients; i++ ) { System.out.print(" " + tabx[i] + " "); } System.out.println("\n"); System.out.println("tab des y : "); // afficher les y for (int i = 0; i < nbrclients; i++ ) { System.out.print("" + taby[i] + " "); } System.out.println("\n"); System.out.println("tab des demandes : "); // afficher les y for (int i = 0; i < nbrclients; i++ ) { System.out.print(" " + demande[i] + " "); } } public static void main(String[] args) { Main r = new Main(); // verification String ver = "y"; while (ver.equals("y")) { Scanner clavier = new Scanner(System.in); System.out.println("entrer le nombre de clients svp"); nbrclients = clavier.nextInt(); // System.out.println("le nembre de clients est : "+" "+nbrClients); essai tabx = new double[nbrclients];// reinitialiser la longeur du vect selon le input taby = new double[nbrclients]; r.tabs(); Scanner cl = new Scanner(System.in); System.out.println("voulez vous faire un nouveau calcul?? si oui appuyez sur y sinon sur un autre bouton"); ver = cl.next();// variable de la verification de l'iteration } System.out.println("vous avez choisi de quitter ,merci"); } }
7 déc. 2013 à 11:57
N'utilise pas de variables globales static lorsqu'elles un comportement de variables locales.
Et n'utilise pas non plus de constructeur d'un objet juste pour appeler pour une méthode qui devrait être static.
Dans ton code soit tout est static, soit rien ne l'est, mais le mélange des genres est horrible.
De plus ne créé pas de Scanner à chaque fois que tu veux faire une lecture. Tu as un seul clavier sur ton ordinateur, il n'y a donc qu'un seul flux System.in, donc il n'y a aucune raison d'utiliser plus d'un objet Scanner pour lire le flux du clavier.
Et avec le Scanner adapte les types de données que tu veux, pourquoi avoir pris un double x, alors que son seul intérêt est de faire int i = (int) x -1; Autant prendre directement un int x.
Sinon pour en revenir à ton ArrayOutOfBoundsException je pense qu'il faudrait regarder la manière don tu as initialisé le tableau "demande", cela n'apparaît pas dans ton code, je pense qu'il est dimensionné une seule fois, mais peut être pas suffisamment grand, il devrait normalement être de la même taille que les autres tableaux :
20 déc. 2013 à 02:27