程序没有读我的if else if语句?

时间:2018-04-23 04:05:43

标签: java if-statement

我是Java的初学者,所以我不确定为什么程序在编译后没有按照我的意愿行事。我已经声明了变量并编译了。这就是代码的外观:

  if((month == 2) && day >= 1 && day <= 28)
  {
     System.out.println(month + "/" + day + " is in the Winter season.");
  }
  else if((month == 2) && (day < 1 && day > 28))
  {
     System.out.println("Invalid day!");
  }

然而,当我运行它时: 输入月份(1-12):2 输入日(1-28):30

它忽略了最后一个if语句,因为它应该说无效的一天!如果我要输入: 输入月份(1-12):2 输入日(1-28):20 2/28是冬季。

它按照我的计划行事。我确实改变了我的代码,并且这有用了:

      if((month == 2) && day >= 1 && day <= 28)
  {
     System.out.println(month + "/" + day + " is in the Winter season.");
  }
  else if((month == 2) && !(day < 1 && day > 28))
  {
     System.out.println("Invalid day!");
  }

有效。有人可以解释为什么第一个代码不起作用但第二个代码不起作用?我的逻辑是不正确的?

7 个答案:

答案 0 :(得分:0)

更改

day < 1 && day > 28

day < 1 || day > 28

else if

答案 1 :(得分:0)

您的第一个代码包含(day < 1 && day > 28) - 这是不可能的,即一天不能同时小于1 AND 大于28

您的第二个代码包含!(day < 1 && day > 28) [替代 - (day < 1 || day > 28)] - 这是可能的&amp;正确并且意味着一天可以小于1 OR 可以大于28

因此,您的第二个代码正在运作。

答案 2 :(得分:0)

这个条件

(day < 1 && day > 28)
如果day小于1 相同day超过28,则

返回true,这是不可能的。您应该使用运算符(||)代替。所以你的代码将是

if((month == 2) && day >= 1 && day <= 28)
{
    System.out.println(month + "/" + day + " is in the Winter season.");
}
else if((month == 2) && (day < 1 || day > 28))
{
    System.out.println("Invalid day!");
}

答案 3 :(得分:0)

您的else if应如下:

else if((month == 2) && (day < 1 || day > 28))

这是解释。如果有两件事情,你想进入else if区块:

  • 月份是二月(即2
  • 使用2月份(通常)28天的事实,该月的天数为“无效”。

二月天什么时候“无效”?当 <小于0“”大于28“时,它可能无效。也就是说,您需要OR操作||,而不是当前的AND操作,&&

答案 4 :(得分:0)

(day < 1 && day > 28)永远不会成为现实,因为int不能低于1且大于28。

将其更新为:(day < 1 || day > 28)

答案 5 :(得分:0)

&安培;&安培;仅当两个布尔运算都为真时,运算符才会返回true。

(day < 1 && day > 28)

当day = 30时,第一个布尔表达式day&lt; 1被评估为false。因此,即使第二个表达式为真,结果也是错误的。

!(day < 1 && day > 28) 

这里,我们取组合表达式的NOT值。即使是一个表达式,如果为false,它也会将其评估为真。

正确的方法是使用以下格式。

 else if((month == 2) && (day < 1 || day > 28))

答案 6 :(得分:0)

 else if((month == 2) && (day < 1 && day > 28))
  {
     System.out.println("Invalid day!");
  }

在此代码段中,您可以看到(日期&lt; 1&amp;&amp; day&gt; 28)错误的情况。由于日期不能同时满足他们两个。它应该是这样的。

else if((month == 2) && (day < 1 || day > 28))
  {
     System.out.println("Invalid day!");
  }