[英]Printing only one error message out of multiply if statements
我有一个方法可以检查输入日期的月,日,年是否正确,该方法可以正常工作,除了如果输入的日期月/年/日无效,则它会为每张检查打印错误消息(月/日/年)是错误的。 我只有一个错误消息,而不是全部三个。
这是我拥有的方法的代码:
//Check to see if the date is valid
public static boolean isValid(int day, int month, int year){
boolean monthValid, yearValid, dayValid;
boolean check = true;
int dayNumber = 0;
//check to see if the month is valid
if(month <= 12 && month > 0){
monthValid = true;
}else{
monthValid = false;
System.out.println("Invalid month.");
check = false;
}
//Check to see if the year is valid
if (year <= 3000 && year >= 1){
yearValid = true;
}else{
yearValid = false;
System.out.println("Invalid Year.");
check = false;
}
//assigns month to a number
if (month == JAN || month == MAR || month == MAY || month == JUL || month == AUG ||month == OCT || month == DEC){
dayNumber = LONG;
}else if (month == APR || month == JUN || month == SEP || month == NOV){
dayNumber = SHORT;
}else if (month == FEB && true == isLeapYear(year)){
dayNumber = AKWARD;
}else if( month == FEB){
dayNumber = MINI;
}
//check to see if day is valid
if (day < dayNumber && day > 0 || day == dayNumber){
dayValid = true;
}else if(day == AKWARD && false == isLeapYear(year)){
System.out.println("Invalid day number for February for given year.");
check = false;
}else if( day > dayNumber || day < 0){
dayValid = false;
System.out.println("Invalid day number for month.");
check = false;
}
return check;
}
因此,如果输入的日期是13/34/3001(MM / DD / YYYY),则输出为:
输入三个数字格式的日期,m / d / year:13/34/3001
无效的月份。
无效的年份。
月份的无效天数。
同样,我只需要打印这三个错误消息中的一个。
谢谢!!
除了设置check = false之外,您还可以在编写错误消息时立即返回false:
yearValid = false;
System.out.println("Invalid Year.");
return false;
这最像一个设计问题。 它可以有多种解决方案。
简单是返回false,在打印出第一条错误消息后,它将不再继续。
否则,请使用stringbuffer,将所有错误消息附加到其中并打印出来。 你的选择。
您可以使用例外兄弟。
将您的检查代码包装在try / catch中,并在出现问题时引发异常。 像这样:
//Check to see if the date is valid
public static boolean isValid(int day, int month, int year){
boolean monthValid, yearValid, dayValid;
boolean check = true;
int dayNumber = 0;
try{
//check to see if the month is valid
if(month <= 12 && month > 0){
monthValid = true;
}else{
monthValid = false;
throw new IllegalArgumentException("INVALID");
}
//Check to see if the year is valid
if (year <= 3000 && year >= 1){
yearValid = true;
}else{
yearValid = false;
throw new IllegalArgumentException("INVALID");
}
//assigns month to a number
if (month == JAN || month == MAR || month == MAY || month == JUL || month == AUG ||month == OCT || month == DEC){
dayNumber = LONG;
}else if (month == APR || month == JUN || month == SEP || month == NOV){
dayNumber = SHORT;
}else if (month == FEB && true == isLeapYear(year)){
dayNumber = AKWARD;
}else if( month == FEB){
dayNumber = MINI;
}
//check to see if day is valid
if (day < dayNumber && day > 0 || day == dayNumber){
dayValid = true;
}else if(day == AKWARD && false == isLeapYear(year)){
throw new IllegalArgumentException("INVALID");
}else if( day > dayNumber || day < 0){
dayValid = false;
throw new IllegalArgumentException("INVALID");
}
}catch(IllegalArgumentException e)
{
System.out.println("Invalid date.");
return false;
}
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.