Java运算符的逻辑&&和||

Luk*_*itz 5 java if-statement operators

亲爱的程序员你好,

我有一个字符串String input = "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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是不起作用的代码:

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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个代码片段之间的唯一区别是if子句中的运算符.

我认为这些运营商的结果是:

&& 运营商:

false + false = false
true  + false = false
false + true  = false
true  + true  = true
Run Code Online (Sandbox Code Playgroud)

|| 运营商:

false + false = false
true  + false = true
false + true  = true
true  + true  = true
Run Code Online (Sandbox Code Playgroud)

所以在我看来第二个代码片段应该工作,第一个应该抛出一个NumberFormatException.但事实并非如此.

我确信对于我正在做的事情有一些更好的解决方案,但我的问题只是关于我的if语句中的逻辑.有人能解释一下这背后的逻辑吗?我完全感到困惑,并感谢每一个有帮助的答案.

问候Lukas Warsitz

Lio*_*onC 7

在第二个片段中,if子句将始终为true,因为它i始终不是2或不是5(因为它不能同时为2和5)

对于你想要做的事情,你的第一个片段很好,它完全符合你的要求:如果你不是第三个元素,也不是第6个元素,你想要解析,否则你就是日期中的一个点.