如何检查整数是否在给定范围内?

时间:2011-04-06 23:11:34

标签: java comparison

希望得到比

更优雅的东西
if (i>0 && i<100) 

21 个答案:

答案 0 :(得分:155)

你可以添加间距;)

if (i > 0 && i < 100) 

答案 1 :(得分:23)

我认为

C:\Documents and Settings\gcappella\workspace\codenameporc\src>wsimport -s . htt
p://localhost:4321/WS/Rubica?wsdl
analisi di WSDL in corso...


[ERROR] Server returned HTTP response code: 403 for URL: http://localhost:4321/W
S/Rubica?wsdl

Lettura del documento WSDL: http://localhost:4321/WS/Rubica?wsdl non riuscita pe
rché 1) non è stato possibile trovare il documento; 2) non è stato possibile leg
gere il documento; 3) l'elemento radice del documento non è <wsdl:definitions>.


[ERROR] failed.noservice=Impossibile trovare wsdl:service nei WSDL forniti:

 È necessario fornire almeno un WSDL con almeno una definizione di servizio.


        Analisi di WSDL non riuscita.

C:\Documents and Settings\gcappella\workspace\codenameporc\src>wsimport -s . htt
p://localhost:4444/WS/Rubica?wsdl
analisi di WSDL in corso...


[ERROR] Server returned HTTP response code: 403 for URL: http://localhost:4444/W
S/Rubica?wsdl

Lettura del documento WSDL: http://localhost:4444/WS/Rubica?wsdl non riuscita pe
rché 1) non è stato possibile trovare il documento; 2) non è stato possibile leg
gere il documento; 3) l'elemento radice del documento non è <wsdl:definitions>.


[ERROR] failed.noservice=Impossibile trovare wsdl:service nei WSDL forniti:

 È necessario fornire almeno un WSDL con almeno una definizione di servizio.


        Analisi di WSDL non riuscita.

C:\Documents and Settings\gcappella\workspace\codenameporc\src>

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

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

if (0 < i && i < 100) 

至少它使用了库。

答案 2 :(得分:20)

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

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

另见:how to construct a apache commons 3.1 Range<Integer> object

答案 3 :(得分:7)

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

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

如果您将独占和包容性比较混合在一起,则尤其如此。方法名称可以帮助避免拼写错误,例如使用&lt;什么时候应该使用&lt; =该方法还可以确保min&lt;最大等..

答案 4 :(得分:4)

This guy做了一个很好的Range课程。

然而,它的使用不会产生很好的代码,因为它是一个泛型类。你必须输入类似的东西:

if (new Range<Integer>(0, 100).contains(i))

或(如果先实施,会更好):

class IntRange extends Range<Integer>
....
if (new IntRange(0,100).contains(i))

语义上两者都比默认情况下Java提供的更好,但内存开销,性能下降和整体输入更加值得。就个人而言,我更喜欢mdma's approach

答案 5 :(得分:4)

如果您正在寻找比

更原始的东西
if (i > 0 && i < 100)

你可以试试这个

import static java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))

答案 6 :(得分:3)

ValueRange range = java.time.temporal.ValueRange.of(minValue, maxValue);
range.isValidIntValue(x);

如果minValue <= x <= MaxValue-即在范围内

,则返回true

如果x 或 x> maxValue-即超出范围

,则返回false

与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.");
}

下面的程序检查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;
    }
}

******输出******

true,因为19是范围的一部分

因为15是范围的一部分,所以为

false,因为所有三个值均超出范围

答案 7 :(得分:2)

if ( 0 < i && i < 100)  

if ( 'a' <= c && c <= 'z' )

答案 8 :(得分:2)

if(i <= 0 || i> = 100)

它会起作用。

答案 9 :(得分:2)

我认为它已经是比较范围的优雅方式。但是,这种方法会导致您编写额外的单元测试以满足所有&&个案例。

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

使用Java 8 Streams:

if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i))

使用Math class:

if(Math.max(0, i) == Math.min(i, 100))

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

答案 10 :(得分:1)

尝试:

if (i>0 && i<100) {} 

它至少会起作用;)

答案 11 :(得分:1)

使用此代码:

if (lowerBound <= val && val < upperBound)
or
if (lowerBound <= val && val <= upperBound)

答案 12 :(得分:0)

如果您只想测试 i 的值是否在 [0..100) 范围内,并且您想要布尔结果,那么

i >= 0 && i < 100

很好,会给你 truefalse。如果您愿意在值超出范围时抛出异常,则可以使用内置的 checkIndex 方法

Objects.checkIndex(i, 100)

如果超出范围将抛出 IndexOutOfBoundsException。当然,它不是一个通用的解决方案,如果你的上下文是你的范围检查是为了检查数组边界,它真的只是更漂亮,但它的优点是不需要任何第三方库,这对小型程序。

答案 13 :(得分:0)

Google的Java库Guava也实现了Range

304 not modified

答案 14 :(得分:0)

 Range<Long> timeRange = Range.create(model.getFrom(), model.getTo());
    if(timeRange.contains(systemtime)){
        Toast.makeText(context, "green!!", Toast.LENGTH_SHORT).show();
    }

答案 15 :(得分:0)

如果您正在使用Spring数据,则还可以使用Spring中的Range对象。

range = new org.springframework.data.domain.Range(3,8); range.contains(5)将返回true。

答案 16 :(得分:0)

如果您确信数字以2的补充形式存储:

return  ((x-low) <= (high-low));

更通用,更安全的解决方案是:

return ((x-high)*(x-low) <= 0);

答案 17 :(得分:0)

你检查的是一个整数是在一个范围内。大于下限,小于上限。试着巧妙地减法可能不会做你想要的。

答案 18 :(得分:-1)

另一种自命不凡的方式:

if (IntStream.rangeClosed(1, 99).anyMatch(x -> x == i)) {
    // ...
}

答案 19 :(得分:-1)

if (i in 0..100) {}

请试试这个以获得高效的代码;)

答案 20 :(得分:-4)

    val = val < MIN ? MIN : ( val > MAX ? MAX : val);