因此,在此代码中,我试图让用户输入一年和一个月(前三个字母),然后确定特定月份包含的天数。由于涉及闰年的困难,我在编写用户输入“2月”作为月份的部分时遇到问题。当我测试它时,它说: “2002年2月有29天” “2002年2月有28天”
如何制作它只显示29天?
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a year: ");
int year= input.nextInt();
input.nextLine();
System.out.println("Enter a month (first 3 letters with the first letter in uppercase): ");
String month = input.nextLine();
// leap year logic starts here
if (year % 4 == 0 || "Feb".equals(month)) {
System.out.println( month + year + "has 29 days");
}
else if (year % 4 > 0 || "Feb".equals(month)) {
System.out.println( month + year + "has 28 days");
}
else if("Jan".equals(month) || "Mar".equals(month) ||
"May".equals(month) || "July".equals(month) ||
"Aug".equals(month) || "Oct".equals(month) ||
"Dec".equals(month)) {
System.out.println(month + year + "has 31 days");
}
else if ("Apr".equals(month)|| "Jun".equals(month) ||
"Sep".equals(month) || "Nov".equals(month)) {
System.out.println(month + year + "has 30 days");
}
答案 0 :(得分:1)
这只是条件语句中的一个简单的逻辑缺陷。你的OR应该是ANDs
if (year % 4 == 0 && "Feb".equals(month)){
// Note the && above
System.out.println( month + year + "has 29 days");
}
else if (year % 4 > 0 && "Feb".equals(month)){
// Note the && above
System.out.println( month + year + "has 28 days");
}
你的每个条件都是(A || B)。第一个条件,年%4 == 0正在评估为真,因此第二个条件甚至没有被评估(这称为布尔短循环)。
答案 1 :(得分:0)
除了使用“and”(&&
)之外,您还需要将它们嵌套在构成闰年的各种条件中:
boolean feb = "Feb".equals(month);
if (feb) {
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
{ System.out.println("has 29 days"); }
else { System.out.println("has 28 days"); }
} else if (....) { }
然而,我会使用带开关的数字月份:
// NB: if you use Date.getMonth() add +1
switch(month) {
case 1,3,5,7,9,10,12:
System.out.println("31 days");
break;
case 4,6,7,11:
System.out.println("30 days");
break;
case 2:
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
System.out.println("has 29 days");
} else {
System.out.println("has 28 days");
}
break;
}
但当然最好的闰年功能是你不自己编程的功能。更好地检查系统库:http://www.java2s.com/Tutorial/Java/0040__Data-Type/Getthelastdayofamonth.htm