2010-03-19 12 views
34

Estoy tratando de escribir un método que cuando se invoca, cambia una variable booleana true, y cuando se invoca de nuevo, cambia la misma variable a falso, etc.¿Cómo hacer que una variable booleana cambie entre verdadero y falso cada vez que se invoca un método?

Por ejemplo: llamada al método -> Boolean = true - > método de llamada -> = false -> método de llamada -> Boolean = true

Así que, básicamente,

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

no estoy seguro de cómo lograr esto, porque cada vez que llamo el método, el booleano el valor cambia a verdadero y luego a falso nuevamente.

+0

¿Qué código tienes? – extraneon

+3

si ese fue el código real que probó, tenga en cuenta que 'a = false' está ** configurando ** a como falso, sin probarlo. use 'a == falso' o mejor aún'! a' para probar si un booleano es falso. –

+0

no es que simplemente establezca a = verdadero, que luego desencadena el 2do si y establece a = falso nuevamente.lo necesita en su segunda línea – Horse

Respuesta

26

Sólo alternar cada vez que se llama

public class A 

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

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

creo que eso es lo que está pidiendo ??

40

Sin mirarlo, configúralo en sí mismo. No sé cómo codificarlo en Java, pero en Objective-C diría

booleanVariable = !booleanVariable; 

Esto voltea la variable.

+2

. Es lo mismo en Java. – MinecraftShamrock

14

Asumiendo que su código es el código real, tiene dos problemas:

1) sus instrucciones if necesitan estar '==', no '='. Quieres hacer una comparación, no una asignación.

2) El segundo si debería ser un 'else if'. De lo contrario, cuando es falsa, se establece el valor true, entonces el segundo caso será evaluado, y podrás configurarlo de nuevo a falso, como usted la describe

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

Otra cosa que lo hacen aún más simple es la '!' operador:

a = !a; 

cambiará el valor de a.

+2

El segundo si, si (a == verdadero) ni siquiera es necesario, simplemente es suficiente, a menos que sea un valor booleano que pueda tener un valor nulo. – extraneon

+0

Cierto, pero siempre prefiero equivocarme por ser explícito en mi intento, especialmente cuando respondo preguntas como estas. – bobDevil

103
value ^= true; 

Eso es value xor-equals true, que lo activará siempre, y sin ramificaciones ni variables temporales.

+1

Esto es fabuloso, gracias :) – aperson

+2

Por lo general, hay formas más legibles de hacerlo, como la respuesta de Randy. –

+10

Acepto que es menos legible. Sin embargo, no creo que sea descuidado, ni es incorrecto, los dos criterios sugeridos para un voto negativo. – ILMTitan

13

lo hago con boolean = !boolean;

6
var logged_in = false; 
logged_in = !logged_in; 

Un pequeño ejemplo:

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>

Cuestiones relacionadas