JCreator上的Java(使用while循环创建LEAP YEAR程序)

时间:2013-09-13 08:53:50

标签: java while-loop multiple-conditions

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循环中有许多条件才能让这个程序按照我想要的方式工作。

5 个答案:

答案 0 :(得分: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年的所有年份,并且每个年份检查它是否为闰年(年%4 == 0)。然后它会相应打印。

编辑:你也可以使用ternary operator(条件?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()}

可以翻译成:当条件为真时,我会做某事(),当它不再真实时我会继续。

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

看看我如何在循环中使用IF ELSE语句?这个循环经历了多年,对于每个循环,我们测试它是否是闰年。

关于闰年:

您确定一年是否为闰年的方法尚不完整。 Wikipedia proposes a good algorithm

 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

答案 1 :(得分: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循环中拥有它时,无论何时遇到非闰年,它都会打破循环。

答案 2 :(得分: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++;
}

答案 3 :(得分:0)

这个单一条件将按您的意愿运作 这里我使用了三元运算符,它的工作原理与其他情况相同, 基本语法为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++;
            }

答案 4 :(得分: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次会相当昂贵。