每次调用方法时如何使布尔变量在true和false之间切换?

ape*_*son 37 java boolean

我试图编写一个方法,在调用时,将布尔变量更改为true,并在再次调用时,将相同的变量更改为false等.

例如:call method - > boolean = true - > call method - > boolean = false - > call method - > boolean = true

基本上,

if (a = false) { a = true; }
if (a = true) { a = false; }
Run Code Online (Sandbox Code Playgroud)

我不知道如何实现这一点,因为每次调用方法时,布尔值都会变为true,然后再次变为false.

ILM*_*tan 116

value ^= true;
Run Code Online (Sandbox Code Playgroud)

这是值xor-equals true,它将每次翻转它,并且没有任何分支或临时变量.

  • 我同意它不太可读.但是,我不认为它是草率的,也不是不正确的,这两个标准建议投票. (15认同)
  • 这得看情况.如果类的函数或其内部状态的重要部分基本上是可切换的,那么是:指示了一个toggleFoo()函数,它可能更具可读性.但是,如果布尔值是局部变量,则foo ^ = true是完全可读的,并且不会使用不相关的方法使类混乱. (3认同)
  • 通常有更易读的方法,例如Randy的回答. (2认同)
  • 以前从未见过这种翻转,为灵感投票! (2认同)

Joe*_*asq 47

不看它,把它设置为不是它自己.我不知道如何用Java编写代码,但在Objective-C中我会说

booleanVariable = !booleanVariable;
Run Code Online (Sandbox Code Playgroud)

这翻转了变量.

  • 在Java中也是如此. (2认同)

Ran*_*mon 30

只需在每次调用时切换

this.boolValue = !this.boolValue;
Run Code Online (Sandbox Code Playgroud)


bob*_*vil 17

假设您的代码是实际代码,那么您有两个问题:

1)你的if语句必须是'==',而不是'='.你想做比较,而不是分配.

2)第二个if应该是'else if'.否则,当它为假时,您将其设置为true,然后将评估第二个if,并且您将其设置为false,如您所述

if (a == false) {
  a = true;
} else if (a == true) {
  a = false;
}
Run Code Online (Sandbox Code Playgroud)

另一件让它变得更简单的事就是"!" 运营商:

a = !a;
Run Code Online (Sandbox Code Playgroud)

将切换a的值.

  • 第二个if,if(a == true)甚至不需要,只要其他就足够了,除非它是一个可能具有空值的布尔值. (2认同)

小智 15

我这样做 boolean = !boolean;


Evi*_*ide 7

var logged_in = false;
logged_in = !logged_in;
Run Code Online (Sandbox Code Playgroud)

一个小例子:

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);
}
Run Code Online (Sandbox Code Playgroud)
.test{
    color: red;
    font-size: 16px;
    width: 100000px
}

.test_hidde{
    color: #000;
    font-size: 26px;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)