Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept

Résolu
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?

5 réponses

  1. Modérateur
    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
    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
      1. Modérateur
        "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
    2. 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
      1. Modérateur
        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
    3. 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
      1. 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