[Java] Nombre "d'éléments" d'un tableau

Fermé
Calo - 18 nov. 2010 à 15:07
 Pedro - 5 déc. 2010 à 13:58
Bonjour à tous,

j'ai un petit soucis.

J'ai créer un tableau de la manière suivante :

Object[] monTableau = new Object[10];

puis je remplis disons les 3 premières cases du tableau :

monTableau[0] = monObject0;
monTableau[1] = monObject1;
monTableau[2] = monObject1;

Et j'aimerai connaître le nombre d'éléments de ce tableaux (non pas a taille du tableau, qui est 10, mais le nombre d'élements (ou nombre de cases non-vides)

Car je dois calculer le "cardinal" d'un ensemble de taille bornée représenté par un tableau (pas d'autres choix, c'est un TP très scolaire...).

J'ai tenté d'écrire :

public int cardinal() {
int i = 0;
for (int k = 0; k < monEnsemble.length ; k++){
if (monEnsemble[k].equals(null){
i++;
}
}

return i;
}

le problème c'est que Netbeans me précise que le teste dans mon if n'est jamais vrai...
Aussi je ne sais pas comment faire (j'espère que mon explication est suffisamment claire...)

Merci par avance !



A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
18 nov. 2010 à 17:30
Je perçois un problème de raisonnement dans ce que tu fais...

null est un Object, il peut être n'importe où dans ton tableau, y compris en plein milieu d'autres Object, ça ne peut donc pas être la condition d'arrêt de ta boucle !

Voici un exemple qui devrais renvoyer 3, mais qui avec ton code renvoie 2 :

monTableau[0]= new String("Bonjour");
monTableau[1]= new Integer(50);
monTableau[2]= null;
monTableau[3]= new Double(4.35);

System.out.println(cardinal());

Voici un code que je te propose pour obtenir le bon résultat :

public static int cardinal()
{
	int i=0;

	for (Object o : monTableau) // pour chaque objet o de monTableau
		if (o!=null) i++;
	
	return i;
}
3
J'ai trouvé moi même une réponse (toute bête)

pour ceux que ça pourrait intéressé :

public int cardinal() {
int i = 0;
while(monTableau[i] != null && i < monTableau.length){
i++;
}
return i;
}
1
Bonjour,

J'ajouterais que dans ta boucle, il faudrait que tester d'abord que la taille du tableau n'est pas dépassée; si ton tableau est plein c'est le Out of bounds assuré.
Sinon tu fais une boucle type for each comme celle que te propose KX.

En revanche il y a un truc qui m'échappe dans l'explication de KX.

Pour moi il s'agit d'un tableau de références donc si une des cases est à null, cela veut dire qu'il n'y a pas d'objet associé ou un objet initialisé à null.
Donc s'il s'arrange pour ne pas laisser de trous dans son tableau, c'est à dire avoir tous ses objets les uns à la suite des autres depuis l'indice 0, et à n'avoir que des objets initialisés, je dirais qu'il n'y a aucun problème avec sa boucle et son test (à part l'ordre des booléens)...
0