Passage de paramètres aux fonctions en java

Fermé
Cloud95 Messages postés 4 Date d'inscription mardi 11 février 2014 Statut Membre Dernière intervention 18 février 2014 - Modifié par Cloud95 le 18/02/2014 à 00:19
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 18 févr. 2014 à 18:59
Bonjour,
J'ai créé une function en java qui retourne faux si dans le tableau entré en parameter, il y a des doublons et vrai si non.
Quand j'initialise un tableau avec des elements et que je le lui passe en parameter directement ça marche. Mais quand je passe par une function de saisie au clavier ça ne marche pas.
Aidez moi s'il vous plait. Voici mon code :

public static boolean estUnEnsemble(String[] collection)
{
int nb = 0;
if(collection.length == 1)
nb += 0;
else if(collection.length >= 2){
for(int i = 0; i < collection.length - 1; i++)
{
for(int j = i + 1; j < collection.length; j++)
{
if(collection[j] == collection[i])
{
nb += 1;
}
else
{
nb += 0;
}
}
}
}
if(nb != 0)
return false;
else
return true;
}
Merci
A voir également:

4 réponses

tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
18 févr. 2014 à 03:41
Bonjour,
Sans regarder le code que tu publies je pense qu'en toute logique (D'après la description de ton problème) tu devrais regarder plustôt dans ta fonction de saisie et récupérer tous les paramètres saisi et en faire un tableau plus le passer à ta fonction de vérification!
Donc montre plustôt le code ou tu récupère les entrées du clavier!
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 févr. 2014 à 07:42
Je rejoins tksteph sur l'idée que s'il y a un problème ce devrait être dans la manière dont tu remplis le tableau passé en argument.

Quelques remarques malgré tout sur ton code :

Ce que tu fais c'est compter le nombre de collisions au travers tes nb+=1 et nb+=0, alors d'une part nb+=0 c'est vraiment moche, d'autre part la seule chose que tu veux c'est savoir s'il y en a au moins 1, il est donc inutile de continuer le traitement dès lors que tu as nb>0, il faut donc penser à faire des return le plus tôt possible, au final tu ne devrais même pas avoir besoin de la variable nb.

Autre chose, mais c'est plus un détail, en faisant for(int i=0; i<collection.length-1; tu exclues de fait le cas où collection.length==0 ou 1, donc c'est inutile de faire les deux tests if juste avant.

Enfin, je te déconseille d'avoir dans tes codes quelque chose du genre if (test) return true; else return false; tu peux directement remplacer ça par un return test; ce qui reviendra au même mais en beaucoup plus clair car plus concis.
0
Cloud95 Messages postés 4 Date d'inscription mardi 11 février 2014 Statut Membre Dernière intervention 18 février 2014
18 févr. 2014 à 11:47
Bonjour,

Merci de m'aider
Voici la ou je recupere le tableau

taille = lectureClavier.nextInt();
String[] collection = new String[taille];
System.out.println("Saisir un a un la collection : ");
for(int i = 0; i < taille; i++)
{var = lectureClavier.next();
collection[i] = var.toString();
}
String[] test = collection;
System.out.println("Resultat : " + estUnEnsemble(test));
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 févr. 2014 à 13:28
Je ne vois pas de raison que ça ne marche pas. Fait un affichage du tableau pour voir :

System.out.println (java.util.Arrays.toString(collection)); 
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 févr. 2014 à 18:59
Je viens de tester et trouver le problème.

Dans ta méthode estUnEnsemble, tu fais
if(collection[j] == collection[i])
alors que collection est un tableau de String !

Il ne faut jamais comparer deux objets avec == qui ne compare pas la valeur des objets mais les objets eux même.
C'est pour ça que ça fonctionnait lorsque tu mettais en dur tes chaînes de caractères, parce qu'à la compilation quand Java voit plusieurs fois la même chaîne de caractères il l'associe à un seul objet, donc la comparaison fonctionne, ce qui n'est pas le cas lorsque tu fais des next au clavier, qui va te renvoyer des objets différents même s'ils ont la même valeur.

Il faut donc faire :

if(collection[j].equals(collection[i]))
0