Java 使用开关盒简化以下代码?
我正在检查日期的有效性。我只能用其他的和开关箱。我不确定以下内容是否可以简化Java 使用开关盒简化以下代码?,java,Java,我正在检查日期的有效性。我只能用其他的和开关箱。我不确定以下内容是否可以简化 if (monthNum<1||monthNum>12){ validDate=false; System.out.println("Invalid Date Entered"); } else if ((monthNum==1||monthNum==3||monthNum==5||monthNum==7||monthNum==8||monthNum==10||monthNum==12)&
if (monthNum<1||monthNum>12){
validDate=false;
System.out.println("Invalid Date Entered");
}
else if ((monthNum==1||monthNum==3||monthNum==5||monthNum==7||monthNum==8||monthNum==10||monthNum==12)&&(dayNum<1||dayNum>31)) {
validDate=false;
System.out.println("Invalid date entered");
}
else if ((monthNum==4||monthNum==6||monthNum==9||monthNum==11)&&(dayNum<1||dayNum>30)){
validDate=false;
System.out.println("Invalid date entered");
}
else if (monthNum==2 &&(dayNum<1||dayNum>28)) {
validDate=false;
System.out.println("Invalid date entered");
}
else {
validDate=true;
}
if(12个月){
validDate=假;
System.out.println(“输入的日期无效”);
}
else如果((monthNum==1 | | monthNum==3 | | monthNum==5 | | | monthNum==7 | | monthNum==8 | | monthNum==10 | | monthNum==12)和(dayNum31)){
validDate=假;
System.out.println(“输入的日期无效”);
}
else如果((monthNum==4 | | monthNum==6 | | monthNum==9 | | monthNum==11)和&(dayNum30)){
validDate=假;
System.out.println(“输入的日期无效”);
}
否则如果(月=2&(日数28)){
validDate=假;
System.out.println(“输入的日期无效”);
}
否则{
validDate=真;
}
我建议查看java.util.Calendar并使用setLenient(false),而不是编写自己的日期检查逻辑
检查JavaDocs at)而不是编写自己的日期检查逻辑,我建议查看java.util.Calendar并使用setLenent(false) 查看JavaDocs(位于)(为简洁起见,简化了条件) 可更改为:
boolean validDate = !(a||b||c||d);
这有帮助吗?(简化的简洁条件)
boolean validateDate(int monthNum, int dayNum) {
if (dayNum < 1)
return false;
switch (monthNum) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return dayNum <= 31;
case 4:
case 6:
case 9:
case 11:
return dayNum <= 30;
case 2:
return dayNum <= 28;
}
return false;
}
可更改为:
boolean validDate = !(a||b||c||d);
这有帮助吗?boolean validateDate(int monthNum,int dayNum){
boolean validateDate(int monthNum, int dayNum) {
if (dayNum < 1)
return false;
switch (monthNum) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return dayNum <= 31;
case 4:
case 6:
case 9:
case 11:
return dayNum <= 30;
case 2:
return dayNum <= 28;
}
return false;
}
如果(dayNum<1)
返回false;
开关(蒙特纳姆){
案例1:
案例3:
案例5:
案例7:
案例8:
案例10:
案例12:
返回dayNumboolean validateDate(int-monthNum,int-dayNum){
如果(dayNum<1)
返回false;
开关(蒙特纳姆){
案例1:
案例3:
案例5:
案例7:
案例8:
案例10:
案例12:
return dayNum以下是您可以考虑的一些事情:
在设计良好的软件中,这种验证可能会以其自己的方法出现:
bool validateDate(int monthNum, int dayNum) {
// your code goes here
}
我们还可以将月和日验证划分为各自的方法,例如:
bool validateMonth(int monthNum) {
return (1 <= monthNum) && (monthNum <= 12)
}
bool validateDay(int monthNum, int dayNum) {
// ...
}
剩下的部分我肯定会使用开关:
switch(monthNum) {
case 1:
case 3:
// ...
case 12:
return dayNum <= 31;
// similarly for the other months
// ...
case default:
// should probably do something about invalid monthNum
}
这并不是对代码的剧烈更改(它有几乎相同的流程),但它更具组织性,而且开关处理倍数==
检查更方便。以下是一些您可以考虑的事情:
在设计良好的软件中,这种验证可能会以其自己的方法出现:
bool validateDate(int monthNum, int dayNum) {
// your code goes here
}
我们还可以将月和日验证划分为各自的方法,例如:
bool validateMonth(int monthNum) {
return (1 <= monthNum) && (monthNum <= 12)
}
bool validateDay(int monthNum, int dayNum) {
// ...
}
剩下的部分我肯定会使用开关:
switch(monthNum) {
case 1:
case 3:
// ...
case 12:
return dayNum <= 31;
// similarly for the other months
// ...
case default:
// should probably do something about invalid monthNum
}
这并不是对代码的重大更改(它具有几乎相同的流程),但它更具组织性,而且一个开关处理倍数=
检查更方便。1-28总是有效的。从那开始。只有当数字>28时才切换。1-28总是有效的。从那开始。只有当数字>28时才切换。首先,在一天的开始做一次检查Num<1。我不知道有哪一个月有一天0.:-)
如果您保持当前的If/else系统,我至少会将日期检查与月份检查分开。此外,我个人的偏好是,将逻辑设置为积极的-这通常更容易遵循。一两条评论也不错
e、 g
//三十天有九月、四月、六月和十一月
else if((monthNum==4 | | monthNum==6 | | monthNum==9 | | monthNum==11)){
validDate=dayNum首先,在一开始检查dayNum<1。我不知道有哪个月的日期为0:-)
如果您保持当前的If/else系统,我至少会将日期检查与月份检查分开。此外,我个人的偏好是,将逻辑设置为积极的-这通常更容易遵循。一两条评论也不错
e、 g
//三十天有九月、四月、六月和十一月
else if((monthNum==4 | | monthNum==6 | | monthNum==9 | | monthNum==11)){
validDate=dayNum将闰年处理添加到mergeconflict的答案中:
private static boolean validateDate(int yearNum, int monthNum, int dayNum) {
if (monthNum < 1 || monthNum > 12) return false;
if (dayNum < 1 ) return false;
switch(monthNum) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return dayNum <= 31;
case 4: case 6: case 9: case 11:
return dayNum <= 30;
default: // 2
boolean leapYear = (yearNum % 4 == 0 && yearNum % 100 != 0) || yearNum % 400 == 0;
if (leapYear) {
return dayNum <= 29;
} else {
return dayNum <= 28;
}
}
private static boolean validateDate(int dearneum、int monthNum、int dayNum){
如果(monthNum<1 | | monthNum>12)返回false;
如果(dayNum<1)返回false;
开关(蒙特纳姆){
案例1:案例3:案例5:案例7:案例8:案例10:案例12:
return dayNum将闰年处理添加到mergeconflict的答案中:
private static boolean validateDate(int yearNum, int monthNum, int dayNum) {
if (monthNum < 1 || monthNum > 12) return false;
if (dayNum < 1 ) return false;
switch(monthNum) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return dayNum <= 31;
case 4: case 6: case 9: case 11:
return dayNum <= 30;
default: // 2
boolean leapYear = (yearNum % 4 == 0 && yearNum % 100 != 0) || yearNum % 400 == 0;
if (leapYear) {
return dayNum <= 29;
} else {
return dayNum <= 28;
}
}
private static boolean validateDate(int dearneum、int monthNum、int dayNum){
如果(monthNum<1 | | monthNum>12)返回false;
如果(dayNum<1)返回false;
开关(蒙特纳姆){
案例1:案例3:案例5:案例7:案例8:案例10:案例12:
return dayNum以下较短,它使用了这样一个事实,即您可以在始终保持的检查上添加更详细的检查(即所有月份的天数都少于32天),并将sysout消息移动到所有测试完成的位置
boolean validDate = (monthNum >= 1 && monthNum <= 12 && dayNum >= 1 && dayNum <= 31);
if (monthNum == 4 || monthNum == 6 || monthNum == 9 || monthNum == 11) {
validDate &&= (dayNum <= 30);
}
else if (monthNum == 2) {
validDate &&= (dayNum <= 28);
}
if (!validDate) {
System.out.println("Invalid Date Entered");
}
boolean validDate=(monthNum>=1&&monthNum=1&&dayNum以下内容较短,它使用了这样一个事实,即您可以在始终保持的检查上添加更详细的检查(即所有月份都少于32天),并将sysout消息移动到完成所有测试的位置
boolean validDate = (monthNum >= 1 && monthNum <= 12 && dayNum >= 1 && dayNum <= 31);
if (monthNum == 4 || monthNum == 6 || monthNum == 9 || monthNum == 11) {
validDate &&= (dayNum <= 30);
}
else if (monthNum == 2) {
validDate &&= (dayNum <= 28);
}
if (!validDate) {
System.out.println("Invalid Date Entered");
}
boolean validDate=(monthNum>=1&&monthNum=1&&dayNum为什么只能使用else
和开关
案例?这是作业吗?如果是,请添加“作业”标记。@user2979616:2月29日发生了什么事!?这些系统输出是必需的吗?否则,如果
-否则
条件
的话,你只需要一个。@user988052而不是dayNum>28
他可以尝试dayNum>(new gregorianaldendar.isLeapYear(new gregorianalendar().YEAR))29:28;
为什么只能使用else
和切换
案例?这是作业吗?如果是,请添加“作业”标记。@user2979616:2月29日发生了什么事!?这些系统输出是必需的吗?否则,如果
-否则
条件
的话,你只需要一个。@user988052而不是dayNum>28
由于限制,他可以尝试dayNum>(new gregorianaldendar.isLeapYear(new gregorianalendar().YEAR))29:28;