如何检查int是否在值范围内

时间:2013-11-07 04:26:21

标签: java if-statement

在特定的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之间,则条件为真,否则为假。我怎么能这样做?

5 个答案:

答案 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)

它看起来并不太乱,并且会起作用(你需要决定它是包容性的还是排他性的)。

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