private String getWhoozitYs(){
StringBuffer sb = new StringBuffer();
boolean stop = generator.nextBoolean();
if(stop = true)
{
sb.append("y");
getWhoozitYs();
}
return sb.toString();
}
Ceci est un morceau de code pour un projet que je fais dans un cours de programmation. Le problème que j'ai est qu'après avoir déclaré l'arrêt booléen et essayé de lui attribuer une valeur booléenne générée aléatoirement, je ne peux pas l'utiliser dans l'instruction if pour déterminer si je dois ajouter plus de y au StringBuffer ou non. J'ai le générateur aléatoire à l'intérieur d'un constructeur, donc cette partie n'est pas un problème. J'ai supposé que puisque j'avais déclaré le booléen en dehors de l'instruction if, je serais en mesure de l'utiliser à l'intérieur, mais cela ne semble pas être le cas. La vraie question est de savoir comment utiliser un booléen déterminé aléatoirement dans une instruction if.
if(stop = true)
devrait être if(stop == true)
, ou simplement (mieux!) if(stop)
.
C'est en fait une bonne occasion de voir pourquoi vous utilisez toujours if(something)
si vous voulez voir si c'est true
au lieu d'écrire if(something == true)
(mauvais style!).
En faisant stop = true
alors vous assignez true
à stop
et ne comparez pas.
Alors pourquoi exécuter le code sous l'instruction if
?
Voir JLS - 15.26. Opérateurs d'affectation :
Au moment de l'exécution, le résultat de l'expression d'affectation est la valeur de la variable après que l'affectation s'est produite. Le résultat d'une expression d'affectation n'est pas lui-même une variable.
Donc, parce que vous avez écrit stop = true
, alors vous remplissez la condition if
.
Le problème ici est
si (stop = true)
est une affectation et non une comparaison.
Essayez if (stop == true)
Jetez également un œil aux Top Ten Erreurs Java Programmers Make .
En fait, toute l'approche serait plus propre si vous n'aviez à utiliser qu'une seule instance de StringBuffer, au lieu d'en créer une dans chaque appel récursif ... J'irais pour:
private String getWhoozitYs(){
StringBuffer sb = new StringBuffer();
while (generator.nextBoolean()) {
sb.append("y");
}
return sb.toString();
}
Puisque stop
est booléen, vous pouvez changer cette partie en:
//...
if(stop) // Or to: if (stop == true)
{
sb.append("y");
getWhoozitYs();
}
return sb.toString();
//...
if(stop == true)
ou
if(stop)
= est pour l'affectation.
== sert à vérifier l'état.
if(stop = true)
Il affectera true à stop et évalue si (true). Ainsi, il exécutera toujours le code à l'intérieur si, car stop sera toujours attribué à true.
Essaye ça:-
private String getWhoozitYs(){
StringBuffer sb = new StringBuffer();
boolean stop = generator.nextBoolean();
if(stop)
{
sb.append("y");
getWhoozitYs();
}
return sb.toString();
}
= est pour l'affectation
écrire
if(stop){
//your code
}
ou
if(stop == true){
//your code
}
en plus, vous pouvez simplement écrire
if(stop)
{
sb.append("y");
getWhoozitYs();
}