Les méthodes qui renvoient une valeur booléenne
Ok, donc ma question est concernant boolean retourne. Pour mon ordi Sci devoirs, je dois faire une inscription à un cours du programme à l'aide de méthodes, et l'un d'eux est un complément de cours de méthode. Fondamentalement, vous de recherche pour la classe dans un catalogue, et si elle correspond à celle que vous l'ajouter à la étudiants de l'horaire et de retourner une valeur booléenne vrai. Je l'ai fait, mais pour une raison quelconque, il me donne une erreur. Voici le code:
public static boolean addCourse(
Course[] catalog,
Course[] mySchedule,
int myNumCourses,
int dept,
int courseNum)
{
int j;
int i;
int k;
int deptCat;
int courseNumCat;
Course courseAdd = null;
char checkDay;
int checkTime;
if (mySchedule.length == myNumCourses) {
return false;
}
for (i = 0 ; i < catalog.length ; i++) {
Course course = catalog[i];
deptCat = course.getDepartment();
courseNumCat = course.getCourseNumber();
if (deptCat == dept && courseNumCat == courseNum) {
courseAdd = catalog[i];
break;
}
else continue; }
for (j = 0 ; j < myNumCourses ; j++) {
if (mySchedule[j] == null) {
mySchedule[j] = courseAdd;
return true;
}
else continue;
}
for (k = 0 ; k < mySchedule.length ; k++) {
Course course = mySchedule[k];
if (course != null) {
checkDay = course.getDay();
checkTime = course.getPeriod();
if (checkDay == courseAdd.getDay() && checkTime == courseAdd.getPeriod()) {
return false;
}
}
else continue;
}
}
Pourquoi ne pas reconnaître le booléenne valeurs de retour? Est-ce parce que je les ai placés à l'intérieur d'une boucle?
L'erreur est quelque chose comme "pas tous les chemins de code de retour d'une valeur" ?
En plus des commentaires sur le manque de retour, j'ai remarqué que vos cotés code n'est pas indenté selon sa logique. Qui peut être un artefact de copier le code. Je ne vous recommandons d'utiliser un éditeur qui peut format Java, et régulièrement reformatage de tout garder alignés de manière logique.
En plus des commentaires sur le manque de retour, j'ai remarqué que vos cotés code n'est pas indenté selon sa logique. Qui peut être un artefact de copier le code. Je ne vous recommandons d'utiliser un éditeur qui peut format Java, et régulièrement reformatage de tout garder alignés de manière logique.
OriginalL'auteur biohax2015 | 2012-11-15
Vous devez vous connecter pour publier un commentaire.
Vous besoin de placer un
return
-déclaration à la fin de votre méthode, même si vous savez qu'il ne sera jamais atteint (le compilateur n'est pas assez intelligente pour savoir que, ce qui explique le message d'erreur).Par exemple, ce sera pas compiler:
sauf si nous ajoutons un dernier
return
déclaration. Ce que vous avez est analogue.Ensuite, il doit y avoir quelque chose de mal avec votre
for
-boucles (c'est à dire qui n'est pas un résultat de la passation de lareturn
déclaration à la fin).soulever la réponse de mon commentaire (secouant la tête)
J'espère que vous êtes sarcastique 😛
OriginalL'auteur arshajii
Il n'y a rien de mal à mettre vos valeurs de retour dans les boucles, cependant, le compilateur voit aucune garantie que cette méthode retourne une valeur, et donc génère une erreur. À la fin de la méthode, vous devrez retourner true ou false, selon ce qui est le plus approprié. Tous vos retours sont à l'intérieur conditions et à cet effet pourrait ne pas exécuter de quitter votre fonction avec aucune instruction return.
Eh bien, c'est un autre problème. Après l'inspection de ce code, je peux vous garantir qu'il ne sera pas compilée avec une erreur du genre "Pas tous les chemins de code de retour d'une valeur". L'ajout d'une instruction de retour à la fin de la méthode n'aura pas d'impact sur l'exécution du code qui le précède.
Alors, quel est mon problème? Je ne vois pas pourquoi la méthode ne serait pas l'exécution de mes boucles for...
Sont tous de votre boucle de contrôle de vars (c'est à dire
myCourses.Length
) supérieur à 0? Votre code n'est pas vraiment facile à lire, mais je ne serais pas surpris si lorsque vous lancez le programme, vous avez 0 de cours et de toutes ces valeurs sont à 0 donc la boucle ne jamais exécuter. Aussi, à partir de ce que je peux dire, aucun deselse continue;
lignes de faire quoi que ce soit. Si votreif
condition n'est pas remplie et que vous n'avez rien d'autre à faire il n'y a aucune raison d'avoir unelse
.OriginalL'auteur evanmcdonnal
Vous devez explicitement retourner un booléen(vrai/faux) dans TOUS les chemin d'accès du code.Parce que votre fonction du type de retour est "booléen".
Dans votre cas,vous devez ajouter une instruction de retour après la dernière boucle.
Si vous ne voulez pas écrire de nombreux "retour xx", vous pouvez changer le type de retour de cette fonction "void".Et jeter l'Exception dans le faux cas.
OriginalL'auteur yellowB
Je pense qu'il y a un problème avec la dernière boucle. Si la condition pour le retour de faux n'est jamais rencontré, il continue jusqu'à arriver à la fin de l'annexe, sans rentrer quoi que ce soit. Si vous deviez ajouter un retour à la fin de la méthode cette boucle pourrait tomber à travers. Avez-vous l'intention de revenir vrai après la boucle, si pas de "return false" est exécuté?
Ensuite, vous devez ajouter un "return true;" à la fin, et avoir pour objectif que chaque cas doit retourner false détecté avant.
OriginalL'auteur Patricia Shanahan
Où vous vous trouvez à l'aide de
if
énoncé de ses possibleselse
doit également de retour ou de débit doit aller à un autre retour.Le RESTE est manquant retour.OriginalL'auteur sunleo