关于||和&&在一起使用时的问题

  • A+
所属分类:未分类

问题

群里有个小伙伴写有关日历的代码,如下:

  1. while(month==1||month==3||month==5||month==7||month==8||month==10||month==12&&day>31){
  2. System.out.println("请输入天数");
  3. day=scanner.nextInt();

测试时发现输入3月后,day无论写多少都要求重新输入天数,陷入循环...

知识点

While循环

基本结构是:

  1. while( 布尔表达式 ) {   //循环内容 }

只要布尔表达式为 true,循环就会一直执行下去。

||和&&

&和 | 既是逻辑运算符也是位运算符,而&&和||只是逻辑运算符。

& 无论左边结果是什么,右边还是继续运算;

&&当左边为假,右边不再进行运算。

| 无论左边结果是什么,右边还是继续运算;

||当左边为真,右边不再进行运算。

改正

方法一:

  1. while((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31){
  2. System.out.println("请输入天数");
  3. day=scanner.nextInt();
  4. }

将整个月数判断用小括号,月份&&天数判断。

方法二:

  1. while(month==1|month==3|month==5|month==7|month==8|month==10|month==12&&day>31){
  2. System.out.println("请输入天数");
  3. day=scanner.nextInt();
  4. }

不用逻辑或||,让判断继续下去。

扩展

||和&&的优先级问题:

  1. public class OperatorAndOrDemo {
  2.     public static void main( String[] args )
  3.     {
  4.         if ( iAmFalse() && (iAmTrueNo1() || iAmTrueNo2() ) )
  5.         {
  6.             System.out.println( "Main:Result is true" );
  7.         } else {
  8.             System.out.println( "Main:Result is false" );
  9.         }
  10.     }
  11.     private static boolean iAmTrueNo1()
  12.     {
  13.         System.out.println( "Has invoked! I'm iAmTrueNo1()" );
  14.         return(true);
  15.     }
  16.     private static boolean iAmTrueNo2()
  17.     {
  18.         System.out.println( "Has invoked! I'm iAmTrueNo2()" );
  19.         return(true);
  20.     }
  21.     private static boolean iAmFalse()
  22.     {
  23.         System.out.println( "Has invoked! I'm iAmFalse()" );
  24.         return(false);
  25.     }
  26. }

结果为:

  1. Has invoked! I'm iAmFalse()
  2. Main:Result is false

测试去掉小括号:

  1. if (iAmFalse() && iAmTrueNo1() || iAmTrueNo2())

结果:

  1. Has invoked! I'm iAmFalse()
  2. Has invoked! I'm iAmTrueNo2()
  3. Main:Result is true

测试如何执行三个函数:

  1. iAmFalse()||iAmTrueNo1()&&iAmTrueNo2()

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: