我有一个程序,需要计算两年之间发生的of年数。我有一个循环,遍历选定的两个年份之间的每个循环,计算它们是否为a年,如果是,则增加一个称为count的变量。最后,我尝试打印该变量以显示我的答案,但它告诉我该变量尚未初始化。所以我在程序开始时用零值声明了它,但是现在它只显示零,并且对该变量所做的更改仍包含在循环中。我不想将print语句放入循环内,因为那只会导致它反复打印一堆数字。我应该怎么做才能解决此问题。
public class Main {
public static void main(String[] args) {
int year1 = 1808;
int year2 = 1805;
boolean leap;
int count = 0;
for (int b = 0; b < 1; b++) {
for (int i = year1; i <= year2; i++) {
if (i % 4 == 0) {
leap = true;
}
if (i % 4 == 0 && i % 100 == 0) {
leap = false;
}
if (i % 100 == 0 && i % 400 == 0) {
leap = true;
}
if (leap = true) {
count++;
}
}
System.out.print(count);
}
}
}
您内部的for循环从未执行,这就是原因。
[year1
大于year2
,所以i <= year2
永远都不是。
首先,我鼓励您将单元测试实践用于这种情况。
没有执行您的循环,year1
大于year2
,因此i <= year2
始终为假。
我建议您将代码重写为:
public class Main {
public boolean isLeapYear(int year) {
boolean isLeap = false;
if (i % 4 == 0) {
isLeap = true;
}
if (i % 4 == 0 && i % 100 == 0) {
isLeap = false;
}
if (i % 100 == 0 && i % 400 == 0) {
isLeap = true;
}
return isLeap;
}
public int getLeapYears(int firstYear, int secondYear) {
int count = 0;
int tmp;
// firstYear must be less than secondYear
if (firstYear > secondYear) {
tmp = firstYear
firstYear = secondYear
secondYear = tmp
}
while(firstYear <= secondYear) {
if (isLeapYear(firstYear)) {
++count;
}
++firstYear
}
return count
}
public static void main(String[] args) {
int year1 = 1805;
int year2 = 1808;
System.out.print(getLeapYears(year1, year2));
}
}
我将您的代码分为3种不同的功能:
为什么这样?通过这种代码设计,您可以编写单元测试,并获得有关代码错误在哪里出现的信息。