mosesDeParis
Messages postés4Date d'inscriptionjeudi 29 novembre 2018StatutMembreDernière intervention30 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.
KX
Messages postés16722Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention25 septembre 2023126 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.
mosesDeParis
Messages postés4Date d'inscriptionjeudi 29 novembre 2018StatutMembreDernière intervention30 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!
mosesDeParis
Messages postés4Date d'inscriptionjeudi 29 novembre 2018StatutMembreDernière intervention30 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é.
29 nov. 2018 à 23:58
Comment je pourrais mettre 0 ou une seule valeur dans le tableauSingulier.
Merci!
Modifié le 30 nov. 2018 à 18:03
ce code me génère des valeurs nulles à partir du premier doublon rencontré.