Passage de paramètres aux fonctions en java
Cloud95
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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 :
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 :
Merci
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;
}
A voir également:
- Passage de paramètres aux fonctions en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Parametres de mon ordinateur - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
4 réponses
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!
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!
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.
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.
Bonjour,
Merci de m'aider
Voici la ou je recupere le tableau
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));
Je viens de tester et trouver le problème.
Dans ta méthode estUnEnsemble, tu fais
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 :
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]))