在特定的if-else
中,我必须确定给定值是否在一个范围内。条件部分如下所示:
else if (a==2 && b.equalsIgnoreCase("line")
&& <<Here I need to search if c falls within a range>> && d)
其中a是int,b是string,c是int,d是boolean。现在,如果c落在1到8之间,则条件为真,否则为假。我怎么能这样做?
答案 0 :(得分:3)
令人惊讶的是,它是c >= low && c <= high
要回答更新,您需要使用一套
Set<Integer> validValues = new HashSet<Integer>();
validValues.add(1);
validValues.add(4);
validValues.add(9);
validValues.add(10);
validValues.add(19);
if (validValues.contains(currentVal)) {
// do stuff
}
为了遏制java的冗长,你可以使用Guava的不可变集:
Set<Integer> validValues = ImmutableSet.of(1, 4, 9, 10, 19);
答案 1 :(得分:2)
我认为你需要c
(c > 1 && c < 8) // 1 and 8 are exclusive
(c => 1 && c <= 8) // 1 and 8 are inclusive
完整样本
else if (a==2 && b.equalsIgnoreCase("line")
&& (c > 1 && c < 8) && d)
如果您需要检查值是否属于一组值,则需要使用Set
,然后检查c
是否属于该值。在您的原始问题中,它被称为范围,因此答案。无论如何,这是你如何检查集合中的值。
Integer[] arr = {1,4,9,11,13};
Set<Integer> set = new HashSet<>(Arrays.asList(arr));
...
else if (a==2 && b.equalsIgnoreCase("line")
&& (set.contains(c)) && d)
答案 2 :(得分:0)
尝试这样,range1和range2是您需要检查b。
的范围(c < range1 && c > range2) ? d=true : d=false;
答案 3 :(得分:0)
您只需添加:
c > 1 && c < 8
如果您觉得您的条件变得过于复杂,我建议您创建布尔方法,将它们简化一点。这是一个非常温和的情况,但是例如这个范围问题可以表示为:
public boolean inRange(int num)
{
return (num > 1 && num < 8);
}
答案 4 :(得分:0)
不幸的是,唯一的方法是使用if else语句(据我所知)。 switch语句不接受条件运算符,因此不适用。正如其他人所建议的那样,您可以使用单独的方法,因为这些方法可以让您检查其他值是否也在范围内。然而,不仅仅是为了这个值,你可以选择像
这样的东西public Boolean inRange(int num, int lowBound, int topBound)
{
return (num > lowBound && num < topBound);
}
只需在你的代码中使用它就像这样
else if (a==2 && b.equalsIgnoreCase("line")
&& inBound(c, 1, 8) && d)
它看起来并不太乱,并且会起作用(你需要决定它是包容性的还是排他性的)。
改变方法的原因是它也可以在其他地方使用,这使它对范围检查很有用。