web-dev-qa-db-fra.com

Comment utiliser ce booléen dans une instruction if?

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.

9
user2041920

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.

21
Maroun

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 .

4
Averroes

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();
}
3

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();
//...
1
CloudyMarble
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.

1
Achintya Jha

Essaye ça:-

private String getWhoozitYs(){
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop)
    {
        sb.append("y");
        getWhoozitYs();
    }
    return sb.toString();
}
1
Rahul Tripathi

= est pour l'affectation

écrire

if(stop){
   //your code
}

ou

if(stop == true){
   //your code
}
1
mp5

en plus, vous pouvez simplement écrire

if(stop)
{
        sb.append("y");
        getWhoozitYs();
}
1
MondayPaper