特别是if-else
,我必须确定给定值是否在一个范围内。条件部分如下所示:
else if (a==2 && b.equalsIgnoreCase("line")
&& <<Here I need to search if c falls within a range>> && d)
其中 a 是 int,b 是字符串,c 是 int,d 是布尔值。现在如果 c 在 1 到 8 之间,则条件为真,否则为假。我怎样才能做到这一点?
特别是if-else
,我必须确定给定值是否在一个范围内。条件部分如下所示:
else if (a==2 && b.equalsIgnoreCase("line")
&& <<Here I need to search if c falls within a range>> && d)
其中 a 是 int,b 是字符串,c 是 int,d 是布尔值。现在如果 c 在 1 到 8 之间,则条件为真,否则为假。我怎样才能做到这一点?
我认为你需要这个条件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)
如果您需要检查值是否属于一组值,则需要使用 aSet
然后检查是否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)
意外惊喜,原来如此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);
像这样尝试,range1 和 range2 是您需要检查 b 的范围。
(c < range1 && c > range2) ? d=true : d=false;
您只需添加:
c > 1 && c < 8
如果你觉得你的条件变得太复杂了,我建议创建布尔方法来简化它们。这是一个非常温和的情况,但例如这个范围问题可以表示为:
public boolean inRange(int num)
{
return (num > 1 && num < 8);
}
不幸的是,唯一的方法是使用 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)
它看起来不太乱,并且可以工作(尽管您需要决定它是包含还是排他的边界)。
更改方法的原因是它也可以在其他地方使用,使其对范围检查很有用。