Jak*_*mpl 169

你可以添加间距;)

if (i > 0 && i < 100) 
Run Code Online (Sandbox Code Playgroud)

  • 不要痉挛我的风格!不,我通常把它放在那里. (8认同)
  • 建议是因为我们通常会编写类似"0 <i <100"的内容,所以尽可能多地遵循它以使代码更容易阅读:"0 <i && i <100".在'0 <i`中左边的常量有点奇怪,但我认为让整个表达看起来最像'0 <... <100`是值得的. (7认同)

Vit*_*aly 25

我认为

if (0 < i && i < 100) 
Run Code Online (Sandbox Code Playgroud)

更优雅.看起来像数学方程式.

如果您正在寻找特别的东西,您可以尝试:

Math.max(0, i) == Math.min(i, 100)
Run Code Online (Sandbox Code Playgroud)

至少它使用库.

  • 请注意,第二个解决方案是包容性的,第一个不是。 (9认同)

bea*_*eat 25

对于使用公共语言的人来说,选项是使用范围:

Range<Integer> myRange = Range.between(100, 500);
if (myRange.contains(200)){
    // do something
}
Run Code Online (Sandbox Code Playgroud)

另请参见:如何构造apache commons 3.1 Range <Integer>对象

  • 但这是非常低效的 (3认同)

Arp*_*ini 15

ValueRange range = java.time.temporal.ValueRange.of(minValue, maxValue);
range.isValidIntValue(x);
Run Code Online (Sandbox Code Playgroud)
  • 它返回trueif minValue <= x <= MaxValue- 即在范围内
  • 它返回falseif x < minValue x > maxValue - 即超出范围

使用if条件如下图:

int value = 10;
if (ValueRange.of(0, 100).isValidIntValue(value)) {
    System.out.println("Value is with in the Range.");
} else {
    System.out.println("Value is out of the Range.");
}
Run Code Online (Sandbox Code Playgroud)

下面的程序检查hasTeen方法中传递的任何整数值是否在 13()到 19()的范围内。


import java.time.temporal.ValueRange;
  
public class TeenNumberChecker {

    public static void main(String[] args) {
        System.out.println(hasTeen(9, 99, 19));
        System.out.println(hasTeen(23, 15, 42));
        System.out.println(hasTeen(22, 23, 34));
    }

    public static boolean hasTeen(int firstNumber, int secondNumber, int thirdNumber) {

        ValueRange range = ValueRange.of(13, 19);
        System.out.println("*********Int validation Start ***********");
        System.out.println(range.isIntValue());
        System.out.println(range.isValidIntValue(firstNumber));
        System.out.println(range.isValidIntValue(secondNumber));
        System.out.println(range.isValidIntValue(thirdNumber));
        System.out.println(range.isValidValue(thirdNumber));
        System.out.println("**********Int validation End**************");

        if (range.isValidIntValue(firstNumber) || range.isValidIntValue(secondNumber) || range.isValidIntValue(thirdNumber)) {
            return true;
        } else
            return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

true 因为 19 是范围的一部分

true 因为 15 是范围的一部分

false 因为所有三个值都超出了范围


mdm*_*dma 7

我不知道那是不是很优雅,但如果你经常重复这个表达,那么把它放到一个方法中是个好主意,例如

class MathUtil
{
   public static boolean betweenExclusive(int x, int min, int max)
   {
       return x>min && x<max;    
   }
}
Run Code Online (Sandbox Code Playgroud)

如果您将独占和包容性比较混合在一起,则尤其如此.方法名称可以帮助避免拼写错误,例如使用<when <=应该使用.该方法还可以确保min <max等.

  • 这是一个好主意,直​​到有人输入`boolean accepted = MathUtil.betweenExclusive(min,max,x);`和mungles顺序.:( (9认同)

esi*_*n88 5

如果您正在寻找比

if (i > 0 && i < 100)
Run Code Online (Sandbox Code Playgroud)

你可以试试这个

import static java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))
Run Code Online (Sandbox Code Playgroud)


Sah*_*bra 5

我认为它已经是比较优雅的方式来比较范围了。但是,这种方法会使您编写额外的单元测试来满足所有&&情况。

因此,可以使用以下任何一种方法来避免编写额外的单元测试。

使用Java 8流:

if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i))
Run Code Online (Sandbox Code Playgroud)

使用数学课:

if(Math.max(0, i) == Math.min(i, 100))
Run Code Online (Sandbox Code Playgroud)

我个人建议第二种方法,因为它最终不会创建大小等于要检查范围的数组。