我做了一个将日,月,年转换为儒略日的程序。如何更有效地处理错误?
int year, month, day;
do
{
System.out.print("Enter the year ");
year = keyIn.nextInt();
if(year < 1)
{
System.out.println("Invalid year entered!");
System.out.println(" ");
}
}while(year < 1);
do
{
System.out.print("Enter the month ");
month = keyIn.nextInt();
if(month < 1 || month > 12)
{
System.out.println("Invalid month entered!");
System.out.println(" ");
}
}while(month < 1 || month > 12);
do
{
System.out.print("Enter the day ");
day = keyIn.nextInt();
if(day < 1 ||day > 31)
{
System.out.println("Invalid day entered!");
System.out.println(" ");
}
}while((month == 4 && day > 30) || (month == 2 && day > 29) || day < 1 ||day > 31);
keyIn.close();
int [] daysInAMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 == 0 && year % 100 != 0)
{
daysInAMonth[1] = 29;
}
else if(year%400==0 && year%100==0)
{
daysInAMonth[1] = 29;
}
else
{
daysInAMonth[1] = 28;
}
int julianDays = 0;
for (int i=0; i < month-1; i++)
{
julianDays += daysInAMonth[i];
}
julianDays += day;
System.out.println("The Julian Day is " +julianDays);
但是,当用户输入的日期,如2001年3月(2001年,4,31)月31日我已经遇到了一些问题,因为有4月份只有30天。
有没有更有效的方式来处理这些错误,而不是试图在用户输入日期时测试do-while循环中的所有内容?
3月有31天,实际上,你可以用4月份来提问。 – Massimo
Java的'Calendar'实际上可以容忍数天或数月等超出限制的内容,并且会尽可能地翻身。我并不是说这肯定是要走的路,但如果你不想处理它,“日历”可能会使这成为可能。 –
@Massimo我的意思是四月,你是对的,对不起。 – Mano