验证条件语句中范围的更快方法?
Quicker way to validate ranges in conditional statements?
我目前正在做一些需要很多整数范围的事情(为了练习,我是初学者)。现在这样做基本上是常识:
else if (age >= 2 && age <=3){
System.out.println("You're a toddler!");
但是,我觉得必须有一种更快的方法来为条件语句创建范围,我无法想象这是最快的方法。如果没有,那没关系。如果有更快的方法,我只是不想继续这样做。谢谢
如果您正在映射覆盖整个范围的值,您可以通过控制它们的顺序来使用单个比较,并且 return 来自函数的值作为跳过以后比较的方法:
public String ageDescription(short age){
if (age < 2){
return "less than 2";
}
if (age <= 3){
// we know age >= 2 since we didn't return
return "more than 2 but less than or equal to 3";
}
// no comparison for last value
return "You're older than 3";
}
但是,您目前的操作方式完全没问题。
您可以为此创建一个class,例如:
public class Range{
int min;
int max;
String msg;
public Range(int min, int max, String msg){
this.min = min;
this.max = max;
this.msg = msg;
}
public boolean isInRange(int val){
return val >= min && val <= max;
}
public void showMessage(){
System.out.println(msg);
}
}
这是您可以使用它的方式:
Range range1 = new Range(2,3,"You're a toddler!");
Range range2 = new Range(4,8,"....");
Range range3 = new Range(9,12,"....");
List<Range> ranges = new ArrayList<>(Arrays.asList(range1,range2,range3));
int val = ...;
for(Range range:ranges){
if(range.isInRange(val)){
range.showMessage();
}
}
我不确定这是否使它更容易,但它肯定使它更动态,它使在运行时 add/remove 范围更容易。
我目前正在做一些需要很多整数范围的事情(为了练习,我是初学者)。现在这样做基本上是常识:
else if (age >= 2 && age <=3){
System.out.println("You're a toddler!");
但是,我觉得必须有一种更快的方法来为条件语句创建范围,我无法想象这是最快的方法。如果没有,那没关系。如果有更快的方法,我只是不想继续这样做。谢谢
如果您正在映射覆盖整个范围的值,您可以通过控制它们的顺序来使用单个比较,并且 return 来自函数的值作为跳过以后比较的方法:
public String ageDescription(short age){
if (age < 2){
return "less than 2";
}
if (age <= 3){
// we know age >= 2 since we didn't return
return "more than 2 but less than or equal to 3";
}
// no comparison for last value
return "You're older than 3";
}
但是,您目前的操作方式完全没问题。
您可以为此创建一个class,例如:
public class Range{
int min;
int max;
String msg;
public Range(int min, int max, String msg){
this.min = min;
this.max = max;
this.msg = msg;
}
public boolean isInRange(int val){
return val >= min && val <= max;
}
public void showMessage(){
System.out.println(msg);
}
}
这是您可以使用它的方式:
Range range1 = new Range(2,3,"You're a toddler!");
Range range2 = new Range(4,8,"....");
Range range3 = new Range(9,12,"....");
List<Range> ranges = new ArrayList<>(Arrays.asList(range1,range2,range3));
int val = ...;
for(Range range:ranges){
if(range.isInRange(val)){
range.showMessage();
}
}
我不确定这是否使它更容易,但它肯定使它更动态,它使在运行时 add/remove 范围更容易。