0
public class LeapYear_2 {

    public static void main(String[] args) {

    int year = 1900;                
        while (year <= 2100 && (year % 4 == 0)){

            System.out.println(year + " Is a Leap Year");
            year++;

            System.out.println(year + " Is not a leap year");
            year++;
        }   

    }
}

我只想知道我的代码有什么问题吗?我想创建一个程序,1900 年到 2100 年将显示闰年,而这不是。

我只是不知道如何在许多条件下使用 while……看来我必须在 while 循环中有许多条件才能使该程序按我的意愿工作。

4

5 回答 5

0

这就是你想要做的:

公共类 TestLeapYear {

public static void main(String[] args) {

    int year = 1900;                
    while (year <= 2100 ){

        if (year % 4 == 0){
            System.out.println(year + " Is a Leap Year");
            year++;
        }
        else {
            System.out.println(year + " Is not a leap year");
            year++;
        }
    }   

}


}

此代码遍历从 1900 到 2100 的所有年份,并检查每个年份是否为闰年 (year%4==0)。然后它会相应地打印。

编辑:您也可以使用三元运算符(条件?doIfTrue:doIfFalse)在一行中完成(但它的可读性较差......)

public static void main(String[] args) {

    int year = 1900;                
    while (year <= 2100 ){
            System.out.println(year + " Is "+ ((year % 4 == 0)? "" : "not")+" a Leap Year");
            year++;

    }   

}

在您的原始代码中:

您正在滥用 while 循环。while 循环的原理是做同样的事情,直到条件为真。

所以这 :

 while(condition){ doSomething()}

可以翻译为:当条件为真时,我将 doSomething() 当它不再为真时,我将继续。

在您的原始代码中,条件是year <= 2100 && (year % 4 == 0)只有当年份小于或等于 2100 并且年份模 4 等于 0 时才为真这是第二个条件为假,因此退出循环。

看看我是如何在循环中使用 IF ELSE 语句的?这个循环多年来一直在进行,对于每个人,我们都会测试它是否是闰年。

关于闰年:

您确定一年是否为闰年的方法并不完整。维基百科提出了一个很好的算法

 if year is divisible by 400 then
   is_leap_year
 else if year is divisible by 100 then
   not_leap_year
 else if year is divisible by 4 then
   is_leap_year
 else
   not_leap_year
于 2013-09-13T09:00:49.407 回答
0

我相信这就是您正在寻找的:

public static void main(String[] args) {
int year = 1900;                
    while (year <= 2100){
        if (year % 4 == 0) {
            System.out.println(year + " Is a Leap Year");
            year++;
        }
        else {
            System.out.println(year + " Is not a leap year");
            year++;
        }
    }
}

因此,while 循环负责遍历所有年份,if 语句每年检查它是否与您的闰年查询匹配。当您像以前那样在 while 循环中使用它时,每当您遇到非闰年时,它也会中断循环。

于 2013-09-13T09:01:07.607 回答
0

只是为了好玩作弊码;)

int count = 0;
for (int i = 1900; i < 2100; i++){
 if (count == 4){
  System.out.println(i + " Is a Leap Year");
  count = 0;
  }
  count++;
}
于 2013-09-13T09:12:15.197 回答
0

这个单一的条件将按照你的意愿工作,我使用了三元运算符,它的工作方式与 if else 条件相同,基本语法是your condition ? true : false

in your case 
    condition : year % 4==0 
    true :  year Is a Leap Year
    false : year Is a not Leap Year


            int year = 1900;                
            while (year <= 2100){
                System.out.println(year % 4==0 ? year+" Is a Leap Year" :year + " Is not a leap year" );
                year++;
            }
于 2013-09-13T09:15:47.810 回答
0

我想补充一点,在大多数给出的答案中,1900 年将显示为闰年。那是因为只有检查年份是否可以被4整除,但百年年份也应该能被400整除。因此,1900年不是闰年,但2000年是。

条件实际上应该是

if(year % 4 == 0 && !(year % 100 == 0 && year % 400 != 0))
  // now we have a leap year.

此外,当我这样做时,您也可以执行以下操作

Calendar cal = Calendar.getInstance();   
cal.set(Calendar.YEAR, year);   
if(cal.getActualMaximum(DAY_OF_YEAR) > 365)
  // leap year.

但是与模运算相比,重复 200 次会相当昂贵。

于 2013-09-13T09:28:34.363 回答