所以我目前正在完成大学一年级的任务,而且我对其中一个问题感到困惑。就是这样。 如果所选类型或计划无效,则修改setType()和setPlan()方法以返回布尔值true / false。即如果类型为“Bogus”,则忽略该类型,并向该调用返回“false”。修改Test类以添加将报告错误调用的“if”语句。
我当前的方法代码如下所示:
public void setType(String newType) {
switch (newType) {
case "Basic":
mType = newType;
break
case "Enhanced":
mType = newType;
break
default:
break
}
我的问题是,如何添加if语句并且是否需要更改以使void方法返回true / false值?
答案 0 :(得分:1)
试试这个:
public boolean setType(String newType) {
switch (newType) {
case "Basic":
case "Enhanced":
mType = newType;
return true;
default:
return false;
}
}
实际上,您实际上不需要额外的if
语句,并且您可以使用fallthrough(两个或更多连续switch
来检查case
中的两个或更多个案例)。
答案 1 :(得分:0)
您可以在应用中的某个全局可访问位置定义一个包含所有有效类型的数组:
public static final String[] VALID_TYPES = {"Basic","Enhanced"};
然后有一个方法只迭代所有这些类型并检查给定的值是否匹配其中一个:
public static boolean isValidType(String candidate){
for(String validType : VALID_TYPES){
if(validType.equals(candidate)){
return true;
}
}
return false;
}
与使用switch语句相比,这很好用的是你可以轻松地修改有效类型列表(添加/更改/删除类型),而无需触摸检查给定类型的有效性的方法。因此,它易于维护且不易出错(在交换机中,您可能忘记为每个可能的值添加case语句,或者您可能忘记在某处添加break语句等)
答案 2 :(得分:0)
最佳做法是说这是“参数检查”,而且早期失败也更清晰:
public boolean setType(String newType) {
if (!newType.matches("Basic|Enhanced")) {
return false;
}
type = newType; // or whatever you need to do
return true;
}
测试选项还包括:
if (!Arrays.asList("Basic", "Enhanced").contains(newType))
还可以在没有额外代码的情况下整齐地处理newType
为空。
但处理此问题的最佳方法是使用enum
,这样就不会出现错误值。
答案 3 :(得分:0)
其他答案都很好。这是我的看法。三元运算符?
和:
表达式在逻辑上是"如果那么其他"。
public boolean setType(String newType) {
boolean result = (newType.equals("Basic") || newType.equals("Enhanced"));
mType = result ? newType : mType;
return result;
}
答案 4 :(得分:0)
public class YourClass{
private String mType;
private static final List<String> VALID_TYPES = Arrays.asList("Basic","Enhanced");
public boolean setType(String newType){
if(!VALID_TYPES.contains(newType)){
return false;
}
mType = newType;
return true;
}
}
与setPlan方法类似,只需定义另一个VALID_PLANS列表。
关于你的考试班:
if(!yourClassObject.setType("Some Invalid Type")){
System.err.println("Invalid type!");
}
答案 5 :(得分:-2)
添加类的布尔属性,如下所示:
public class Test
{
private boolean flag;
}