11 votes

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

Il s'agit d'un morceau de code pour un projet que je réalise dans le cadre d'un cours de programmation. Le problème que je rencontre est qu'après avoir déclaré le booléen stop 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 Random à 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 pourrais l'utiliser à l'intérieur, mais cela ne semble pas être le cas. La vraie question est de savoir comment je peux utiliser un booléen déterminé aléatoirement dans une instruction if.

27voto

Maroun Maroun Points 31217

if(stop = true) devrait être if(stop == true) ou simplement (mieux !) if(stop) .

Il s'agit en fait d'une bonne occasion de voir pourquoi il faut toujours utiliser if(something) si vous voulez savoir si c'est true au lieu d'écrire if(something == true) (mauvais style !).

En faisant stop = true alors vous attribuez true a stop et ne pas comparer.

Pourquoi donc le code sous le if a-t-elle été exécutée ?

Voir le 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 de la variable après l'affectation. Le résultat d'une n'est pas lui-même une variable.

Ainsi, parce que vous avez écrit stop = true alors vous répondez à l'exigence de if l'état.

5voto

Averroes Points 1823

Le problème est le suivant

si (stop = true) est une assignation et non une comparaison.

Essayer if (stop == true)

Jetez également un coup d'œil à la page Les dix principales erreurs commises par les programmeurs Java .

3voto

En fait, toute l'approche serait plus propre si vous ne deviez utiliser qu'une seule instance de StringBuffer, au lieu d'en créer une à chaque appel récursif... J'opterais pour :

private String getWhoozitYs(){
     StringBuffer sb = new StringBuffer();
     while (generator.nextBoolean()) {
         sb.append("y");
     }

     return sb.toString();
}

2voto

Achintya Jha Points 7108
if(stop == true)

o

if(stop)

\= est pour l'affectation.

\== permet de vérifier les conditions.

if(stop = true) 

Il attribue la valeur true à stop et évalue if(true). Ainsi, il exécutera toujours le code à l'intérieur de if parce que stop sera toujours assigné à true.

1voto

CloudyMarble Points 16155

Depuis stop est un booléen, vous pouvez changer cette partie en :

//...
if(stop) // Or to: if (stop == true)
{
   sb.append("y");
   getWhoozitYs();
}
return sb.toString();
//...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X