web-dev-qa-db-fra.com

Comment faire basculer une variable booléenne entre vrai et faux à chaque fois qu'une méthode est invoquée?

J'essaie d'écrire une méthode qui, lorsqu'elle est invoquée, change une variable booléenne en true, et lorsqu'elle est invoquée à nouveau, change la même variable en false, etc.

Par exemple: méthode d'appel -> boolean = true -> méthode d'appel -> boolean = false -> méthode d'appel -> boolean = true

Donc en gros,

if (a = false) { a = true; }
if (a = true) { a = false; }

Je ne sais pas comment y parvenir, car chaque fois que j'appelle la méthode, la valeur booléenne passe à true puis à false.

36
aperson
value ^= true;

C'est la valeur xor-equals true, qui la retournera à chaque fois, et sans aucune branche ou variable temporaire.

115
ILMTitan

Sans le regarder, ne le réglez pas sur lui-même. Je ne sais pas comment le coder en Java, mais en Objective-C je dirais

booleanVariable = !booleanVariable;

Cela inverse la variable.

47
JoePasq

Il suffit de basculer chaque fois qu'il est appelé

this.boolValue = !this.boolValue;
30
Randy Simon

En supposant que votre code ci-dessus est le code réel, vous avez deux problèmes:

1) vos instructions if doivent être '==', pas '='. Vous voulez faire une comparaison, pas une affectation.

2) Le second if devrait être un "else if". Sinon, quand il est faux, vous le définissez sur true, puis le second if est évalué, et vous le redéfinissez sur false, comme vous le décrivez

if (a == false) {
  a = true;
} else if (a == true) {
  a = false;
}

Une autre chose qui le rendrait encore plus simple est le '!' opérateur:

a = !a;

changera la valeur de a.

17
bobDevil

Je le fais avec boolean = !boolean;

15
GFP
value = (value) ? false : true;

Opérateur conditionnel (ternaire).

10
whirlwin
var logged_in = false;
logged_in = !logged_in;

Un petit exemple:

var logged_in = false;


$("#enable").click(function() {
    logged_in = !logged_in;
    checkLogin();
});

function checkLogin(){
    if (logged_in)
        $("#id_test").removeClass("test").addClass("test_hidde");
    else
        $("#id_test").removeClass("test_hidde").addClass("test");
    $("#id_test").text($("#id_test").text()+', '+logged_in);
}
.test{
    color: red;
    font-size: 16px;
    width: 100000px
}

.test_hidde{
    color: #000;
    font-size: 26px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test" id="id_test">Some Content...</div>
<div style="display: none" id="id_test">Some Other Content...</div>


<div>
    <button id="enable">Edit</button>
</div>
7
EvilInside
private boolean negate(boolean val) {
    return !val;
}

Je pense que c'est ce que vous demandez ??

3
rayd09

in Java lorsque vous définissez une valeur sur variable, elle renvoie une nouvelle valeur. Donc

private boolean getValue()
{
     return value = !value;
}
2
bmavus