J'essaye de vérifier si un nom a déjà été utilisé dans le tableau, mais il ne fonctionne que pour le spot [0]. Je suppose que cela vient de la boucle for en booléen qui ne passe qu'une seule fois et ne s'incrémente pas pour vérifier les autres points?
Vous avez essayé de changer différentes boucles if et while
public boolean check(Depot [] depots, String name){ boolean check = false; for (int i = 0; i < depots.length; i++){ if(depots[i].getDepotName().equals(name)) return true; else { return false; } } return check; }
if (depotCount < 4){ // Runs if the depots are less than 4 System.out.println("Enter your depots name"); name = console.next().toLowerCase(); if (check(depots, name) == true){ System.out.println("Depot name already exists"); break; } else { addDepot(depots, name); } } else { System.out.println("Only 4 depots are allowed"); break; }
Donc ça marche si un prénom comme "Warehouse" et j'essaye de mettre "Warehouse" une seconde fois. mais si j'essaie de mettre le même nom que les seconds emplacements, cela ne revient pas comme vrai.
5 Réponses :
Vous devez supprimer return false;
dans la boucle for, si vous y mettez, la boucle for ne s'exécute qu'une fois avec l'index 0.
public boolean check(Depot[] depots, String name) { for (int i = 0; i < depots.length; i++) { if (depots[i].getDepotName().equals(name)) return true; } return false; }
Vous ne pouvez raccourcir comme ceci sans variable de contrôle.
public boolean check(Depot[] depots, String name) { boolean check = false; for (int i = 0; i < depots.length; i++) { if (depots[i].getDepotName().equals(name)) return true; } return check; }
Dans votre boucle for, vous avez un "else return false". ce que cela fait, c'est que si vous trouvez quelque chose qui n'est pas égal, vous retournez immédiatement faux. Cependant, si vous revenez à n'importe quelle occasion dans votre méthode, la méthode est terminée donc elle ne boucle pas à travers tous les dépôts
public boolean check(Depot [] depots, String name){ for (int i = 0; i < depots.length; i++){ if(depots[i].getDepotName().equals(name)) return true; } return false; }
Le problème est que vous revenez toujours sur la première itération de la boucle.
Essayez de modifier votre code comme suit:
if (check(depots, name)) {
De plus, vous n'avez pas besoin de comparer pour vrai dans une instruction if. C'est-à-dire que vous pouvez changer ceci:
if (check(depots, name) == true) {
en ceci:
public boolean check(Depot[] depots, String name) { for (int i = 0; i < depots.length; i++) { if (depots[i].getDepotName().equals(name)) return true; } return false; }
De plus, vous voudrez peut-être consulter les HashMap . Ceux-ci ont des méthodes telles que:
Quant à la valeur, cela peut être tout ce que vous voulez. Par exemple, il peut s'agir d'une chaîne contenant l'adresse de l'entreprise. Il peut s'agir d'un entier contenant le nombre d'employés de cette entreprise. Ou, et c'est la meilleure, cela pourrait être une instance d'une classe contenant tous les détails imaginables sur l'entreprise!
Alternativement, si vous n'avez pas besoin de stocker une valeur, vous pouvez toujours utiliser un KeySet , mais les HashMaps sont probablement plus utiles pour vous.
C'est parce que vous avez return false;
. Cela termine simplement l'exécution de la méthode (et ce faisant la boucle for) car la valeur false a été renvoyée à l'appel de méthode.
public boolean check(Depot[] depots, String name) { boolean check = false; for (int i = 0; i < depots.length; i++) { if (depots[i].getDepotName().equals(name)) return true; } return check; }
À mon avis, vous devriez supprimer: else {return false; } à partir de votre code:
public boolean check(Depot[] depots, String name) { boolean check = false; for (int i = 0; i < depots.length; i++) { if (depots[i].getDepotName().equals(name)) return true; } return check; }
le débogage est la clé
Vous n'avez jamais besoin d'écrire
quelque chose == vrai
: cela équivaut à n'utiliser quequelque chose
.@AndyTurner jusqu'à récemment, je le pensais aussi ... mais peut-être que c'est plus facile à lire (plus fluide ((pour quelqu'un qui n'a pas l'habitude d'écrire du code)))
@CarlosHeuberger l'une des choses importantes pour apprendre à écrire du code est d'apprendre à écrire du code idiomatique, ce qui signifie nécessairement apprendre à lire du code idiomatique.
d'accord mais pas tout le monde qui lit le code doit écrire du code (par exemple, testeurs, managers, autre langue, ...)