假设一个整数应该在以下范围内: [0...2147483647]
我想检查整数变量是否在此范围内.我知道它可以通过简单的if-else语句来完成,但有没有更有效的方法来检查它是否在范围内?
我宁愿不这样做:
if (foo >= 0 && foo <= 2147483647)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
小智 49
Apache Commons Lang有一个用于执行任意范围的Range
类.
Range<Integer> test = Range.between(1, 3);
System.out.println(test.contains(2));
System.out.println(test.contains(4));
Run Code Online (Sandbox Code Playgroud)
番石榴Range
有类似的API.
如果您只是想检查数字是否适合长值或int值,您可以尝试使用它BigDecimal
.有对方法longValueExact
和intValueExact
抛出异常的,如果值太大,对那些精度.
ScA*_*er2 20
您可以创建一个类来表示它
public class Range
{
private int low;
private int high;
public Range(int low, int high){
this.low = low;
this.high = high;
}
public boolean contains(int number){
return (number >= low && number <= high);
}
}
Run Code Online (Sandbox Code Playgroud)
样品用法:
Range range = new Range(0, 2147483647);
if (range.contains(foo)) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*att 12
我知道这是一个相当古老的问题,但是使用Java 8的Streams,你可以得到一系列int
像这样的:
// gives an IntStream of integers from 0 through Integer.MAX_VALUE
IntStream.rangeClosed(0, Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
然后你可以做这样的事情:
if (IntStream.rangeClosed(0, Integer.MAX_VALUE).matchAny(n -> n == A)) {
// do something
} else {
// do something else
}
Run Code Online (Sandbox Code Playgroud)
无论你尝试优化这个不那么密集的计算的效率如何,你都会有一个 if-check :) 你可以从数字中减去上限,如果它是正值,你就知道你超出了范围。您也许可以执行一些布尔位移逻辑来弄清楚它,如果您愿意,您甚至可以使用费马定理(开玩笑:)但重点是“为什么”您需要优化此比较?目的是什么?
您可以使用java.time.temporal.ValueRange
which接受long
,也可以使用int
:
int a = 2147;
//Use java 8 java.time.temporal.ValueRange. The range defined
//is inclusive of both min and max
ValueRange range = ValueRange.of(0, 2147483647);
if(range.isValidValue(a)) {
System.out.println("in range");
}else {
System.out.println("not in range");
}
Run Code Online (Sandbox Code Playgroud)