Java操作符的逻辑&&;及||
亲爱的程序员您好 我有一个字符串Java操作符的逻辑&&;及||,java,if-statement,operators,Java,If Statement,Operators,亲爱的程序员您好 我有一个字符串stringinput=“30.09.1993” 然后我想将这个字符串中的所有数字保存在一个数组中(仅数字!)。“.”位于索引2和索引5,因此我想用if语句跳过循环中字符串的这些部分 我解决了问题,一切正常,但我对&&和|运算符的逻辑感到困惑 这是我的工作代码: String input = "30.09.1993"; int[] eachNumbers = new int[8]; int x = 0; for(int i = 0; i <= 9; i++
stringinput=“30.09.1993”代码>
然后我想将这个字符串中的所有数字保存在一个数组中(仅数字!)。“.”位于索引2和索引5,因此我想用if语句跳过循环中字符串的这些部分
我解决了问题,一切正常,但我对&&
和|
运算符的逻辑感到困惑
这是我的工作代码:
String input = "30.09.1993";
int[] eachNumbers = new int[8];
int x = 0;
for(int i = 0; i <= 9; i++){
if(i != 2 && i != 5){
eachNumbers[x] = Integer.parseInt(input.substring(i, i+1));
x++;
}
}
|
操作员:
false + false = false
true + false = true
false + true = true
true + true = true
因此,在我看来,第二个代码段应该可以工作,第一个应该抛出一个NumberFormatException
。但事实并非如此
我相信对于我所做的事情有一些更好的解决方案,但我的问题只是关于我if语句中的逻辑。有人能给我解释一下这背后的逻辑吗?我完全困惑了,感谢每一个帮助我的答案
问候
Lukas Warsitz在第二个代码片段中,if子句将始终为true,因为i
将始终不是2或不是5(因为它不能同时是2和5)
对于您想要做的事情,您的第一个代码片段很好,它完全符合您的要求:如果您的代码不在第三个元素,也不在第六个元素,那么您需要解析,否则您就在日期中的某个点上。关键点在这里:如果第一个大小写为false,则第二个大小写将不会检查。
true && false // Evaluates false because the second is false
false && true // Evaluates false because the first is false
true && true // Evaluates true because both are true
false && false // Evaluates false because the first is false
true || false // Evaluates true because the first is true
false || true // Evaluates true because the second is true
true || true // Evaluates true because the first is true
false || false // Evaluates false because both are false
及
在| |中,如果第一种情况为真,则第二种情况不会检查。
true && false // Evaluates false because the second is false
false && true // Evaluates false because the first is false
true && true // Evaluates true because both are true
false && false // Evaluates false because the first is false
true || false // Evaluates true because the first is true
false || true // Evaluates true because the second is true
true || true // Evaluates true because the first is true
false || false // Evaluates false because both are false
您的第二个代码段不起作用,因为它应该起作用
if(i != 2 && i != 5)
您的第一个代码段没有抛出错误,原因与您使用&&there的原因相同。,尽管不一定是LionC注意到的问题
4与或逻辑运算符遵循以下逻辑:
&如您上文所述
false + false = false
true + false = false
false + true = false
true + true = true
|如上文所述
false + false = false
true + false = true
false + true = true
true + true = true
&&和| |是快捷运算符,如果第二个值对结果没有影响,则不会对其进行测试
和&
false + false = false
true + false = false
false + true = false
true + true = true
false + untested = false
true + false = false
false + untested = false
true + true = true
|
false + false = false
true + untested = true
false + true = true
true + untested = true
选择一个数字,任意数字。它要么不等于2,要么不等于5
因此,表达式(i!=2 | | i!=5)
可以(由编译器)静态地转换为justtrue
,如果控制结构被消除,则整个
如果任何字符不是数字,那么明显的结果就是出现NumberFormatException
。我不是在回答你的问题,而是建议使用更好的代码
public class splitToArray {
public static void main(String[] args) {
String input = "30.09.1993";
input = input.replace(".", " ");
String array[] = input.split(" ");
for(String value : array){
System.out.println(value);
}
}
}
Output:
30
09
1993
现在使用Integer.parseInt
获取整数值。当您有String input=“30.9.1993”时,这也会起作用代码>[0从09
]i
中删除一次只能有一个值。
因此,以下任一条件均有效:
if(i != 2 && i != 5) //means `i` is not any 2 AND i is not 5
或
注意:(i!=2 | | i!=5)
始终为真,因为在任何时候
如果i=2,则LHSi不等于2
为假,RHSi不等于5
为真
如果i=5,则LHSi不等于2
为真,RHSi不等于5
为假
对于i的所有其他值:LHS和RHS均为真
“false&&false//计算为false,因为两者都为false”-不是真的。因为第一个是假的,所以第二个是未经测试的“|”不代表或:)@rookieB它代表或,但不代表逻辑或;)谢谢注意:)我看不出你使用的是按位的,或者我认为这是一个打字错误。思考了一会儿你的答案后,我明白了,非常感谢你的快速回答!谢谢你的建议,但我需要从出生日期开始创建一个数字总和,这就是为什么我需要每个数字的原因。你告诉了我我以前知道的一切。。不过还是谢谢你