java - 使用带括号的逻辑运算符有什么区别?

标签 java logical-operators parentheses

我得到不同的结果:如果使用括号,则为 -1;如果不使用括号,则为 1。

对于测试用例“30/10/2019”,如果我在下面的行中使用括号,我将得到 -1,如果我不在下面的行中使用括号,我将得到 1:

else if((mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12) && mm<13 && mm>0 && dd>0 && dd<32) return 1;

线上方和线下方有什么区别?

else if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12 && mm<13 && mm>0 && dd>0 && dd<32) return 1;
public class Utility {
   public static int checkDate(String date){
     String []st;
   if((date.charAt(2)=='.' && date.charAt(5)=='.')||(date.charAt(2)=='/' && date.charAt(5)=='/')||(date.charAt(2)=='-' && date.charAt(5)=='-'))
   {
       String token = Character.toString(date.charAt(2));
       if(date.charAt(2) == '.') st = date.split("\\.");
       else st = date.split(token);

       int dd = Integer.parseInt(st[0]);
       int mm = Integer.parseInt(st[1]);
       int yy = Integer.parseInt(st[2]);

        if(mm == 2 && dd>0 && dd<30 && mm<13 && mm>0) return 1;

        else if((mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12) && mm<13 && mm>0 && dd>0 && dd<32) return 1;

        else if((mm==4||mm==6||mm==9||mm==11) && dd>0 && dd<31 && mm<13 && mm>0) return 1;

        else return -1;
   }
   else return -1;
 }
}

import java.util.Scanner;


public class DateValidation {

    public static void main(String[] args) {

       // STUDENT CODE BEGINS HERE
        Scanner sc = new Scanner(System.in);
    String dt=sc.next();
    Utility ut = new Utility();
    int flag = ut.checkDate(dt);
    if(flag==1)
        System.out.println("Valid");
    else
        System.out.println("Invalid");
       // STUDENT CODE ENDs HERE

    }
}

最佳答案

它将执行以下命令(按照最高优先顺序):

  • 括号()
  • 不是!
  • &&
  • 或者||
else if((mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12) && mm<13 && mm>0 && dd>0 && dd<32) 
    return 1;

它将评估(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12)首先,然后&& mm<13 && mm>0 && dd>0 && dd<32

else if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12 && mm<13 && mm>0 && dd>0 && dd<32) 
    return 1;

至于另一个,它将评估 mm<13 && mm>0 && dd>0 && dd<32首先,然后mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12 &&

关于java - 使用带括号的逻辑运算符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488184/

相关文章:

java - 通过 Hybris 中的 cronjob 发布或取消部署促销

java - Java中的继承

go - golang中的 bool 值没有异或运算符吗?

Ruby block 和未加括号的参数

eclipse - 如何阻止 Eclipse 自动添加括号?

java - 显式等待 X 元素可见

java - Sonar 失败 :[ERROR] Unable to create symbol table for <Class>

Ruby 组合比较运算符 (<=>) 和 min/max/minmax 函数

c++ - 使用 if(1 || !Foo()) 有什么理由吗?

python - Processing.py草图错误: unclosed paren/quote mark