Suppression de doublons dans un tableau de string

Résolu
mosesDeParis Messages postés 4 Date d'inscription jeudi 29 novembre 2018 Statut Membre Dernière intervention 30 novembre 2018 - Modifié le 29 nov. 2018 à 22:15
 MRx - 8 mars 2019 à 01:31
Salut à tous, je souhaite supprimer les doublons dans un tableau de chaines de caractères.Mon code est le suivant :
public class TableauSansDoublon{
 public static void main (String [] args){
  String [] tableau ={"a", "c", "b", "bc", "a", "bc", "e", "f", "e", "a", "fe", "a", "f", "e", "e","ef", "fe"};
  
 //affichage du tableau avec les doublons
System.out.println("Le tableau avant suppression de doublon");
  for (int i=0; i < tableau.length; i++){
   System.out.print(tableau[i] + " ");
  }
  System.out.println();
  
 //compter le nombre d éléments differents du tableau 
     int taille =tableau.length;
  for(int i=0; i < tableau.length; i++){
    for(int j=i+1; j<tableau.length; j++){
     if((tableau[i]).equals(tableau[j])){
      taille--;
      break;
     }
    }
  }
System.out.println("le nombre d elements different est " + taille);
  System.out.println();
  
//suppression des doublons
//tableau sans doublons 
String  [] tableauSingulier=new String [taille];
   
   int nombreChaineDifferent=0; 
   int nombreDoublon=0;
   
 
for (int i=0; i < tableau.length ; i++ ){
     
 for (int j=0; j < tableauSingulier.length ; j++){
   if (tableau[i].equals(tableauSingulier[j])){
      nombreDoublon++;
   }
    else {
       tableauSingulier[nombreChaineDifferent]=tableau[i];
  nombreChaineDifferent++;
     }
     
   }
     
     
  }
 //affichage tableau sans doublon
 for (int i=0; i < tableauSingulier.length; i++){
    System.out.print(tableauSingulier[i] + " ");
     }
     
 }
}


ce code me genère une erreur java.lang.arrayindexoutofboundsexception 8.
Merci à vous de m'aider à corriger cette erreur.

4 réponses

KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 124
Modifié le 29 nov. 2018 à 22:26
Bonjour,

Le problème c'est ta double boucle :
for (int i = 0; i < tableau.length; i++) {
    for (int j = 0; j < tableauSingulier.length; j++) {

Tu devrais ajouter 0 ou 1 valeur dans le tableauSingulier pour chaque i, mais ici tu vas en mettre jusqu'à 8 (tableauSingulier.length) pour chaque i à cause de ta boucle sur j...

Si le tableau était assez grand, ton code essaierais de rajouter 112 cases à ton tableau, mais il ne contient que 8 cases (de 0 à 7), donc quand il arrive à la case 8, il plante.
0
mosesDeParis Messages postés 4 Date d'inscription jeudi 29 novembre 2018 Statut Membre Dernière intervention 30 novembre 2018
29 nov. 2018 à 23:58
Bonjour KX, Merci à toi de me répondre.
Comment je pourrais mettre 0 ou une seule valeur dans le tableauSingulier.
Merci!
0
mosesDeParis Messages postés 4 Date d'inscription jeudi 29 novembre 2018 Statut Membre Dernière intervention 30 novembre 2018
Modifié le 30 nov. 2018 à 18:03
j ai modifié le code au niveau de la double boucle for comme ceci.
//suppression des doublons
  
  String  [] tableauSingulier=new String [taille];//tableau sans doubblons
   
   
   
 tableauSingulier[0]=tableau[0];
   int position=1;
  boolean b=false;
  for(int i=1; i < tableau.length; i++){
    for (int j=0; j < position  ; j++){
     if ((tableauSingulier[j].equals(tableau[i]))){

      b=true;
      break; 
     } 
    }
    
    if(b==false){
     tableauSingulier[position]=tableau[i]; 
     position++;
    }
  }

ce code me génère des valeurs nulles à partir du premier doublon rencontré.
0