Sortie de tableau
helloword95
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'ai une ArrayIndexOutOfBoundsException mais je ne comprend pas pourquoi.
Je cherche dans un tableau quelle prénom revient le plus souvent pour ensuite insérer la celebrite donc le prénom est le plus commun dans un nouveau tableau.
J'ai une ArrayIndexOutOfBoundsException mais je ne comprend pas pourquoi.
Je cherche dans un tableau quelle prénom revient le plus souvent pour ensuite insérer la celebrite donc le prénom est le plus commun dans un nouveau tableau.
public Celebrite[] celebAvecPrenomLePlusCommun(){
int nombreCommun = 0;
Celebrite[] tableDePrenomCommun = new Celebrite[nombreCommun];
for (int i = 0; i < nombreDeCelebrites-1; i++){
if (listeDeCelebrites[i].getPrenom().equals(listeDeCelebrites[i+1].getPrenom())){
Celebrite celebrite = listeDeCelebrites[i];
nombreCommun++;
tableDePrenomCommun[i] = celebrite;
}
}
return tableDePrenomCommun;
}
A voir également:
- Sortie de tableau
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
Je pense plutôt que le problème se situe à car .
Tu fais int nombreCommun = 0; puis Celebrite[] tableDePrenomCommun = new Celebrite[nombreCommun]; donc tableDePrenomCommun a une taille de 0.
En faisant nombreCommun++ tu augmentes la taille de nombreCommun, mais ça n'augmente pas rétroactivement la taille de tableDePrenomCommun qui est toujours de 0.
Donc tableDePrenomCommun[i] = celebrite; plante pour i=0 car il n'y a pas de case tableDePrenomCommun[0]
Il faudrait peut-être que tu utilises plutôt des listes que des tableaux si ta taille de données est dynamique.
D'ailleurs tes attributs s'appellent "liste" ce qui est tout à fait cohérent...
Notons par ailleurs que depuis Java 8 on peut éviter de faire soit même ce genre de code avec boucle for, if imbriqué, ajout dans des listes etc.
À la place on utilise des streams et les méthodes utilitaires associées.
Exemple :
public static List<Celebrite> celebAvecPrenomLePlusCommun(final List<Celebrite> celebrites) { return celebrites.stream() // on regroupe les célébrités par prénom .collect(Collectors.groupingBy(Celebrite::getPrenom)) .values().stream() // on ne garde que la liste la plus grande .max(Comparator.comparingInt(List::size)) .get(); }Mon code de test :
import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class Celebrite { private final String prenom, nom; public Celebrite(final String prenom, final String nom) { this.prenom = prenom; this.nom = nom; } public String getPrenom() { return prenom; } public String getNom() { return nom; } @Override public String toString() { return prenom + " " + nom; } public static List<Celebrite> celebAvecPrenomLePlusCommun(final List<Celebrite> celebrites) { return celebrites.stream().collect(Collectors.groupingBy(Celebrite::getPrenom)).values().stream().max(Comparator.comparingInt(List::size)).get(); } public static void main(final String[] args) { final List<Celebrite> list = Arrays.asList(// new Celebrite("P1", "N1"), // new Celebrite("P1", "N2"), // new Celebrite("P2", "N3"), // new Celebrite("P2", "N4"), // new Celebrite("P2", "N5"), // new Celebrite("P3", "N6")); System.out.println(Celebrite.celebAvecPrenomLePlusCommun(list)); } }Cela n'affiche que les noms N3, N4 et N5 car P2 est le prénom le plus représenté.