Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java操作符的逻辑&&;及||_Java_If Statement_Operators - Fatal编程技术网

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)
可以(由编译器)静态地转换为just
true
,如果
控制结构被消除,则整个


如果任何字符不是数字,那么明显的结果就是出现
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,则LHS
    i不等于2
    为假,RHS
    i不等于5
    为真
  • 如果i=5,则LHS
    i不等于2
    为真,RHS
    i不等于5
    为假
  • 对于i的所有其他值:LHS和RHS均为真

  • “false&&false//计算为false,因为两者都为false”-不是真的。因为第一个是假的,所以第二个是未经测试的“|”不代表或:)@rookieB它代表或,但不代表逻辑或;)谢谢注意:)我看不出你使用的是按位的,或者我认为这是一个打字错误。思考了一会儿你的答案后,我明白了,非常感谢你的快速回答!谢谢你的建议,但我需要从出生日期开始创建一个数字总和,这就是为什么我需要每个数字的原因。你告诉了我我以前知道的一切。。不过还是谢谢你