我对java中的“和”和“或”语句有疑问。有没有办法在同一个if语句中同时使用它们?
例如:
if(a==max && b==0) || (a==max && c==0){
a==0;
} else {
a==max;
}
这是合法的吗?
答案 0 :(得分:2)
你需要在外面围绕括号:
if((a==max && b==0) || (a==max && c==0)) {
a = 0;
} else {
a = max;
}
请注意==
是比较,=
是作业:
a = 5; // a is now 5.
if(a == 5) // is a equal to 5?
// more code
另外,作为旁注,您的逻辑可以使用boolean algebra压缩:
if((a == max && b == 0) || (a == max && c == 0))
is the same as:
if(a == max && (b == 0 || c == 0))
答案 1 :(得分:2)
当然,您可以在单个if语句中使用尽可能多的public static String rotate(String userString, int shiftValue, int shiftDirection) {
if (shiftDirection == 1) {
return rotate(userString, shiftValue);
}
else if (shiftDirection == 2) {
return rotate(userString, -shiftValue);
}
else {
return "This is not a valid way to shift your message.";
}
}
public static String rotate(String userString, int shiftValue) {
StringBuilder encoded = new StringBuilder();
int myShift = shiftValue % 26 + 26;
for (char i : userString.toCharArray()) {
if (Character.isLetter(i)) {
if (Character.isUpperCase(i)) {
encoded.append((char) ('A' + (i - 'A' + myShift) % 26 ));
} else {
encoded.append((char) ('a' + (i - 'a' + myShift) % 26 ));
}
} else {
encoded.append(i);
}
myShift = (myShift + shiftValue) % 26;
}
return encoded.toString();
}
或and
语句,直到内存不足为止。
即
or
完全有效。但是,你不能忘记运营商的优先权!
所以当你阅读
"如果a等于b或b等于c且d等于e或d等于c"
编译器读取:
if(a == b || b == c && d == e || d == c)
换句话说,让我们使用true和false:
if(a == b || (b == c && d == e) || d == c)
结果:false
但为什么?
if(false || false && true || false)
if(false ||(false)|| false)
//Remember how and statements work, true && false is still false
出现在and
之前,就像or
之前*
答案 2 :(得分:2)
这是所有其他答案的基础,但没有其他人明确说过:
简单的if
语句如果,如果 ( 条件 ) 声明< / em>的
条件周围的括号不是可选的。
答案 3 :(得分:0)
有没有办法在同一个if语句中同时使用它们?
是的!你完全走上正轨,错过了一套括号,还有一些其他的小错误!
你有正确的想法。您想要使用两个和语句,如果左侧或右侧语句为真,您将分配a=0
,否则a=max
。
if((a==max && b==0) || (a==max && c==0)){ // Compilation error #1
a=0; // Compilation error #2
} else {
a=max; // Compilation error #3
}
因此,如果您尝试运行代码,则会出现3个编译器错误:
a==0
应a=0
将0归为0,而不是检查是否相等a==max
应为a=max
,理由与2.