Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept

Résolu/Fermé
domxaline - 2 déc. 2015 à 21:20
 domxaline - 4 déc. 2015 à 13:01
Bonjour,
en compilant mon prg j'ai un message d'erreur suivant
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
quelqu'un peut m'aider svp

import java.util.Scanner;
public class InserElement
{
public static void main(String[] args)
{
//int t[] =new int[100];
int n,x;
Scanner sc= new Scanner(System.in);
System.out.print("Entrez le nombre d'éléments du tableau :");
n=sc.nextInt();
int t[] =new int[n];
for(int i=0;i<n;i++)
{
System.out.print("Entrer l'élément n°"+(i+1)+" du tableau :");
t[i]=sc.nextInt();
}
System.out.print("Entrez la valeur de l'élément à ajouter");
x=sc.nextInt();
n=n+1; //n vaut 4
// t[n-1]=x;
t[n-1]=x;
for(int i=0;i<n;i++)
{
System.out.println("L'élément t["+(i+1)+"] est :"+t[i]);
}
}
}

je sais qu'il y a pb dans le dernier for, j'ai essayé changer length, ça changé rien,mais je ne sais pas comment le résoudre
quelqu'un peut m'aider svp?


A voir également:

5 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
2 déc. 2015 à 21:49
Bonjour,

Le problème est ici :
n=n+1; //n vaut 4 


Après ça tu ne peux plus te baser sur
n
pour utiliser la boucle, parce que
n
augmente, mais pas le tableau, il fait toujours la même taille qu'avant : 3
1
ok,
"il fait toujours la même taille qu'avant : 3"
mais mon tableau est nb de 4 maintenant, je n'arrive pas trouver la solution.
pouvez vous me dire la solution pour tourner mon boucle for svp
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
3 déc. 2015 à 07:43
"mon tableau est nb de 4 maintenant"
Non, justement, comme je l'ai dit : "il fait toujours la même taille qu'avant : 3"

Ce que tu as augmenté c'est n, pas la taille du tableau. De toute façon un tableau ne peut pas être agrandi, si tu veux un tableau plus grand il faut en créer un nouveau.
0
j'ai corrigé les lignes soulignés
mais il montre toujours erreur, surement que j'avais fait erreur,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
 at java.lang.System.arraycopy(Native Method)
 at InsertElement.main(InsertElement.java:20)

import java.util.Scanner;
public class InserElement 
{
 public static void main(String[] args) 
 {
   //int t[] =new int[100]; 
                Scanner sc=new Scanner(System.in);
  System.out.println("Entrez le nombre d'éléments du tableau:");
  int n=sc.nextInt();
  int tab[]=new int[n];
  int tab1[]=new int[n];
  
  for(int i=0; i<n;i++)
  {
   System.out.println("Entrez la valeur de l élément n°:"+(i+1)+"du tableau:");
   tab[i]sc.nextInt();
  }
  System.out.println("Entrez la valeur de l'élement à ajouter:");
  int x=sc.nextInt();
  n=n+1;

  System.arraycopy(tab, 0, tab1, 0, n);
  for(int i=0; i<n; i++)
  {
   //tab1[i]=tab[i];
   System.out.println("L'élément tab["+(i+1)+"] est :"+tab1[i]);
  }

 }

}
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
3 déc. 2015 à 20:43
Tu peux l'écrire de la manière que tu veux le problème sera toujours le même.
Augmenter n ne va pas augmenter la taille de tes tableaux.

Prends une feuille de papier, dessines 3 traits dessus, prends la feuille en photo, rajoutes 1 trait sur la feuille, il n'y a toujours que 3 traits sur la photo... Pour avoir 4 traits il te faut une nouvelle photo.
Dans ton cas, si tu veux un tableau de taille n+1 alors créé un tableau de taille n+1, mais n'utilises pas tes tableaux de taille n, ils sont trop petits.
0
je crois que je n'ai pas bien compris arraycopy, il me donne erreur
quelqu'un qui me aidez svp
mon prg donne toujours la même erreur
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at InserElement.main(TriBulle.java:22)

import java.util.Scanner;
public class TriBulle
{
public static void main(String[] args)
{
//int tab[] =new int[100];
Scanner sc = new Scanner(System.in);
System.out.print("Entrez le nombre d'éléments du tableau :");
int n=sc.nextInt();
int tab[] =new int[n];
int tab1[]=new int[tab.length+1];
for(int i=0;i<n;i++)
{
System.out.print("Entrer l'élément n°"+(i+1)+" du tableau :");
tab[i]=sc.nextInt();
}
System.out.print("Entrez la valeur de l'élément à ajouter");
int x=sc.nextInt();
n=n+1; //n vaut 4
System.arraycopy(tab, 0, tab1, n, tab.length);
//tab[n-1]=x;
for(int i=0;i<n;i++)
{
System.out.println("L'élément tab["+(i+1)+"] est :"+tab[i]);
}
}
}

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
voilà le pb résolu:

import java.util.Scanner;
public class TriBulle
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("Entrez le nombre d'éléments du tableau :");
int n=sc.nextInt();
int tab[] =new int[n];
for(int i=0; i<tab.length;i++)
{
System.out.print("Entrer l'élément n°"+(i+1)+" du tableau :");
tab[i]=sc.nextInt();
}
System.out.print("Entrez la valeur de l'élément à ajouter");
int x=sc.nextInt();
int tab1[]=new int[n+1];
System.arraycopy(tab, 0, tab1, 0, tab.length);
tab1[n]=x;
for(int i=0;i<tab1.length;i++)
{
System.out.println("L'élément tab1["+(i+1)+"] est :"+tab1[i]);
}
}
}
0