while循环中的多个条件

问题描述:

import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class CountingSundays { 

    public static void main(String args[]) { 

     Calendar cal = new GregorianCalendar(1901, 00, 01); // month set to 0for jan , 1= feb etc 

     while((cal.get(Calendar.YEAR) != 2001) && (cal.get(Calendar.MONTH) != 0) && cal.get(Calendar.DAY_OF_MONTH) != 1) { // while not 1/1/2001 

       System.out.print(cal.get(Calendar.MONTH)); 
      // cal.add(Calendar.DAY_OF_MONTH, 1); 
     } 
    } 
} 

我试图通过while循环遍历每天添加一次,但它不会在第一次访问while循环时进行迭代。 while循环中的条件是否正确?当我测试它时,它只适用于一种情况,但在添加第二种情况时停止。while循环中的多个条件

应该

while(!(cal.get(Calendar.YEAR) == 2001 && cal.get(Calendar.MONTH) == 0 && cal.get(Calendar.DAY_OF_MONTH) == 1)) { // while not 1/1/2001 
+0

万分感谢。这样一个简单的错误。 –

+0

为什么我会投我的问题呢?这是一个真正的问题和真正的错误? –

+0

我想大多数人会认为这个错误太简单了,不能在StackOverflow上。这里真的很容易看到有什么问题。 –

这仅仅是一个简单的逻辑错误。如果即使其中一个是错误的(比方说,如果月份是0),那么你就有真& &假& &是真的,这是错误的。

您需要整个表达式之外的“不”,或者您需要使用“||”把它们混合起来:

while(!(year == 2001 && month == 0 && day == 1)) 

while((year != 2011) || (month != 0) || (day != 1)) 
+0

+1,因为你实际上在开场白中解释了逻辑错误。 –

+0

对于那些有兴趣的人来说,这两个陈述之间的关系是德摩根定律的应用:http://en.wikipedia.org/wiki/De_Morgan's_laws –