我做了一個將日,月,年轉換爲儒略日的程序。如何更有效地處理錯誤?
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