2010-03-19 14 views
34

Sto cercando di scrivere un metodo che quando viene richiamato, cambia una variabile booleana true, e quando viene richiamato ancora una volta, cambia la stessa variabile su false, eccCome trasformare una variabile booleana tra true e false ogni volta che viene invocato un metodo?

Ad esempio: chiamata di metodo -> Boolean = true - > chiamata di metodo -> Boolean = false -> chiamata di metodo -> Boolean = true

Quindi, fondamentalmente,

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

io non sono sicuro di come fare questo, perché ogni volta che chiamo il metodo, il booleano valore cambia in vero e poi falso di nuovo.

+0

Che codice hai? – extraneon

+3

se quello era il codice che hai provato, tieni presente che 'a = false' è ** settando ** a su falso, non testandolo. usa 'a == false' o meglio ancora'! a' per verificare se un booleano è falso. –

+0

non è sufficiente impostare a = true, che quindi attiva il secondo if e imposta a = false di nuovo.hai bisogno di altro sulla tua seconda linea – Horse

risposta

26

Basta alternare ogni volta che viene chiamato

public class A 

    public A() { 
    this.boolValue = false; 
    } 

    public void toggle() { 
    this.boolValue = !this.boolValue; 
    } 
} 
2
private boolean negate(boolean val) { 
    return !val; 
} 

penso che è quello che si sta chiedendo ??

40

Senza guardarlo, impostarlo su se stesso. Non so come codificarlo in Java, ma in Objective-C direi

booleanVariable = !booleanVariable; 

Questo capovolge la variabile.

+2

È lo stesso in Java. – MinecraftShamrock

14

Assumendo che il codice di cui sopra è il codice vero e proprio, ci sono due problemi:

1) la tua se le dichiarazioni devono essere '==', non e '='. Vuoi fare un confronto, non un incarico.

2) Il secondo se dovrebbe essere un 'else if'. In caso contrario, quando è falsa, verrà impostata a true, poi il secondo, se saranno valutati, e ti riportarlo a false, come lei

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

Un'altra cosa che renderebbe ancora più semplice è il '!' operatore:

a = !a; 

cambierà il valore di a.

+2

Il secondo se, se (a == true) non è nemmeno necessario, basta solo altro, a meno che non sia un booleano che potrebbe avere un valore nullo. – extraneon

+0

Vero, ma preferisco sempre errare nel mio esplicito intento, soprattutto quando rispondo a domande come queste. – bobDevil

103
value ^= true; 

che è valore XOR-uguale a true, che sarà capovolgere ogni volta, e senza alcuna ramificazione o variabili temporanee.

+1

Questo è favoloso, grazie :) – aperson

+2

Di solito ci sono modi più leggibili per farlo, come la risposta di Randy. –

+10

Sono d'accordo che sia meno leggibile. Tuttavia, non penso che sia sciatto, né errato, i due criteri suggeriti per un voto negativo. – ILMTitan

13

lo faccio con boolean = !boolean;

6
var logged_in = false; 
logged_in = !logged_in; 

Una piccola premessa:

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>

Problemi correlati