Joh*_*n T 113 c c++ boolean-logic boolean
我只是想根据它已经是什么来翻转一个布尔值.如果这是真的 - 把它弄错.如果它是假的 - 让它成真.
这是我的代码摘录:
switch(wParam) {
case VK_F11:
if (flipVal == true) {
flipVal = false;
} else {
flipVal = true;
}
break;
case VK_F12:
if (otherVal == true) {
otherValVal = false;
} else {
otherVal = true;
}
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*n T 325
您可以像这样翻转一个值:
myVal = !myVal;
Run Code Online (Sandbox Code Playgroud)
所以你的代码会缩短为:
switch(wParam) {
case VK_F11:
flipVal = !flipVal;
break;
case VK_F12:
otherVal = !otherVal;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
Dre*_*rew 74
显然你需要一个工厂模式!
KeyFactory keyFactory = new KeyFactory();
KeyObj keyObj = keyFactory.getKeyObj(wParam);
keyObj.doStuff();
class VK_F11 extends KeyObj {
boolean val;
public void doStuff() {
val = !val;
}
}
class VK_F12 extends KeyObj {
boolean val;
public void doStuff() {
val = !val;
}
}
class KeyFactory {
public KeyObj getKeyObj(int param) {
switch(param) {
case VK_F11:
return new VK_F11();
case VK_F12:
return new VK_F12();
}
throw new KeyNotFoundException("Key " + param + " was not found!");
}
}
Run Code Online (Sandbox Code Playgroud)
:d
</sarcasm>
Run Code Online (Sandbox Code Playgroud)
Mik*_*vey 33
如果您知道值为0或1,则可以这样做flipval ^= 1
.
xam*_*mid 27
我找到的最简单的解决方案:
x ^= true;
Run Code Online (Sandbox Code Playgroud)
Aln*_*tak 10
仅供参考 - 如果不是整数,则所需字段是较大类型中的单个位,请使用'xor'运算符:
int flags;
int flag_a = 0x01;
int flag_b = 0x02;
int flag_c = 0x04;
/* I want to flip 'flag_b' without touching 'flag_a' or 'flag_c' */
flags ^= flag_b;
/* I want to set 'flag_b' */
flags |= flag_b;
/* I want to clear (or 'reset') 'flag_b' */
flags &= ~flag_b;
/* I want to test 'flag_b' */
bool b_is_set = (flags & flag_b) != 0;
Run Code Online (Sandbox Code Playgroud)
这似乎是一个免费的...嘿.这是另一个变体,我想这更像是"聪明"的类别而不是我为生产代码推荐的东西:
flipVal ^= (wParam == VK_F11);
otherVal ^= (wParam == VK_F12);
Run Code Online (Sandbox Code Playgroud)
我猜它的优点是:
一个明显的缺点是
这接近使用?的@ korona解决方案:但是进一步采取了一个(小)步骤.
只是因为我最喜欢的奇怪的球方式切换bool没有列出...
bool x = true;
x = x == false;
Run Code Online (Sandbox Code Playgroud)
也有效.:)
(是的x = !x;
,更清晰,更容易阅读)
codegolf'ish解决方案更像是:
flipVal = (wParam == VK_F11) ? !flipVal : flipVal;
otherVal = (wParam == VK_F12) ? !otherVal : otherVal;
Run Code Online (Sandbox Code Playgroud)