2

特别是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 之间,则条件为真,否则为假。我怎样才能做到这一点?

4

5 回答 5

3

我认为你需要这个条件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)
于 2013-11-07T04:28:07.970 回答
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);
于 2013-11-07T04:28:51.473 回答
0

像这样尝试,range1 和 range2 是您需要检查 b 的范围。

(c < range1 && c >  range2) ? d=true : d=false;
于 2013-11-07T04:33:12.670 回答
0

您只需添加:

c > 1 && c < 8

如果你觉得你的条件变得太复杂了,我建议创建布尔方法来简化它们。这是一个非常温和的情况,但例如这个范围问题可以表示为:

public boolean inRange(int num)
{
    return (num > 1 && num < 8);
}
于 2013-11-07T04:35:22.383 回答
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)

它看起来不太乱,并且可以工作(尽管您需要决定它是包含还是排他的边界)。

更改方法的原因是它也可以在其他地方使用,使其对范围检查很有用。

于 2013-11-07T04:41:47.653 回答