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