在試圖讓我的代碼有點更具美感和短,我試圖從這個改變我的代碼:我的布爾語句的工作的一種方式,但不是在一個看似不變的方式
do
{
System.out.print("Enter day: ");
day = input.nextInt();
if ((isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30)))
{
System.out.println("Invalid input");
}
}
while ((isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30)));
這樣:
boolean invalidDay = (isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30));
do
{
System.out.print("Enter day: ");
day = input.nextInt();
if (invalidDay)
{
System.out.println("Invalid input");
}
}
while (invalidDay);
第二個不按預期工作,但第一種方式完美的作品。我唯一改變的是把長布爾表達式放入一個布爾變量中。謝謝。
也許你應該重新計算循環內的條件? –
你嘗試用調試器來跟蹤這個方法嗎?它應該揭示你的錯誤。 –
只是一個問題。如果你試圖驗證日期是否有效,應該有一個更簡單的方法。看看[這個](http://stackoverflow.com/questions/226910/how-to-sanity-check-a-date-in-java)。 – LaurentG