所以我一直在研究这个程序,并且我已经有了一些日期可以正常工作,但是当我输入2月份的未来年份时,它表明它不应该是无效的。 为了这个计划,二月份的日子只有1-28。 任何人都可以帮我搞错吗?
import java.util.Scanner;
public class FutureDate {
public static void main (String args[]){
int inputMonth;
int inputDate;
int inputYear;
final int currentMonth = 10;
final int currentDate = 24;
final int currentYear = 2013;
final int numberOfDays = 31;
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter a month in format - mm: ");
inputMonth = keyboard.nextInt();
System.out.println("Enter a day in format - dd: ");
inputDate= keyboard.nextInt();
System.out.println("Enter a year in format - yyyy: ");
inputYear = keyboard.nextInt();
if (inputYear < currentYear)
System.out.println("Invalid Date");
else if (inputYear >= currentYear)
{
if (inputMonth >= 1 && inputMonth <=12){
if ((inputMonth == 4 || inputMonth == 6 || inputMonth == 9 || inputMonth == 11) && (inputDate >= 1 && inputDate <= 30))
System.out.println("Valid Date");
else if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=30)
System.out.println("Valid Date");
else if (inputMonth == currentMonth && inputDate > currentDate && inputDate <=30)
System.out.println("Valid Date");
else
System.out.println("Invalid Date");
}
else if (inputMonth == 2 && inputDate >= 1 && inputDate <= 28){
System.out.println("Valid Date");
if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=28)
System.out.println("Valid Date");
else if (inputMonth == currentMonth && inputDate > currentDate && inputDate<=28)
System.out.println("Valid Date");
else
System.out.println("Invalid Date");
}
else if (inputMonth == 1 || inputMonth == 3 || inputMonth == 5 || inputMonth == 7 || inputMonth ==10 || inputMonth == 12 && inputDate >= 1 && inputDate <= 31){
if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=31)
System.out.println("Valid Date");
else if (inputMonth == currentMonth && inputDate > currentDate && inputDate <=31)
System.out.println("Valid Date");
else
System.out.println("Invalid Date");
}
else
System.out.println ("Invalid Date");
}
}
}
答案 0 :(得分:1)
你的第一个if子句会检查它是在1月到12月之间(2月份是哪个),所以它会进入if子句而不是第二个。
如果在第一个
之前移动你的第二个答案 1 :(得分:1)
始终使用花括号作为单行如果 -s和其他 -s。
让我们看看你的第一个 if
// 1.
if (inputMonth >= 1 && inputMonth <=12){
// 2.
if ((inputMonth == 4 || inputMonth == 6 || inputMonth == 9 || inputMonth == 11) && (inputDate >= 1 && inputDate <= 30))
System.out.println("Valid Date");
// 3.
else if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=30)
System.out.println("Valid Date");
// 4.
else if (inputMonth == currentMonth && inputDate > currentDate && inputDate <=30)
System.out.println("Valid Date");
// 5.
else
System.out.println("Invalid Date");
}
现在我们在// 5,打印出“无效日期”。
要修正你的逻辑。