我想返回该数字,只要它在一个限制内,否则返回限制的最大值或最小值。我可以使用Math.min
和Math.max
的组合来完成此操作。
public int limit(int value) {
return Math.max(0, Math.min(value, 10));
}
我想知道我是否会忽略现有的limit
或range
功能。
如果第三方图书馆非常普遍(例如:Commons或Guava),欢迎第三方图书馆
答案 0 :(得分:24)
OP在标准库中询问此实现:
int ensureRange(int value, int min, int max) {
return Math.min(Math.max(value, min), max);
}
boolean inRange(int value, int min, int max) {
return (value>= min) && (value<= max);
}
可惜标准数学库缺少这些
答案 1 :(得分:8)
从版本21开始,Guava包含Ints.constrainToRange()
(以及其他基元的等效方法)。来自release notes:
添加
constrainToRange([type] value, [type] min, [type] max)
方法,将给定值约束到min
和max
值定义的封闭范围。如果值在范围内,则返回值本身;如果值低于范围,则返回min
;如果值超出范围,则返回max
。
由@ dimo414从https://stackoverflow.com/a/42968254/122441复制。
不幸的是,这个版本是截至2017年7月的最新版本,并且在某些项目中(参见https://stackoverflow.com/a/40691831/122441)Guava破坏了向后兼容性,这要求我现在保持第19版。我也很震惊,Commons Lang和Commons Math都没有! :(
答案 2 :(得分:4)
Math.max(int a, int b)
函数定义为:
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
因此,您可以将max
和min
函数组合如下:
private static int MAX=10;
private static int MIN=0;
public int limit(int a) {
return (a > MAX) ? MAX : (a < MIN ? MIN: a );
}
答案 3 :(得分:4)
如果您使用Android,请使用MathUtils(在支持库中),它只有一个功能,专门执行此操作称为clamp。
此方法采用数值并确保它适合给定的值 数值范围。如果该数字小于所需的最小数量 范围,然后将返回范围的最小值。如果 数字高于范围所允许的最大值 将返回最大范围。
答案 4 :(得分:3)
任何实现Comparable
的类的通用方法(包括Number
及其子类):
public static <T extends Comparable<? super T>> T limit(T o, T min, T max){
if (o.compareTo(min) < 0) return min;
if (o.compareTo(max) > 0) return max;
return o;
}
唯一要求是所有参数必须属于同一类。它可以防止可能的类型转换损失
事实上,将float
与double
long
与int
等进行比较是不正确的。例如(double) 0.1 != (float) 0.1
。
<强>用法:强>
double x = 13.000000001;
x = limit(x, 12.0, 13.0);
System.out.println("x = " + x); //x = 13.0
不幸的是,直接用limit(x, 12.0, 13.0)
直接改变第一个参数是不可能的,因为原始类型是不可变的。
答案 5 :(得分:0)
我知道有人要求使用Java。在Android世界中,通常会使用Kotlin
和Java相结合。万一某个Kotlin用户到达这里(就像我一样),那么他们可以使用coerceIn
扩展功能:
科特琳代码:
println(10.coerceIn(1, 100)) // 10
println(10.coerceIn(1..100)) // 10
println(0.coerceIn(1, 100)) // 1
println(500.coerceIn(1, 100)) // 100
详细了解官方Kotlin Documentation。
答案 6 :(得分:-1)
这是使用kotlin制成的,希望对您有所帮助!
var ConstrainedValue = if(CurrentSafeValue < 1) 1 else (if(CurrentSafeValue > 18)18 else CurrentSafeValue);
答案 7 :(得分:-3)
您不需要外部库,请尝试此测试用例:
public class RandomNumber {
public static void main(String[] Args) {
System.out.println("random = " + randomInRange(5,10));
}
public static double randomInRange(double arg1, double arg2) {
double my_number = Math.ceil(Math.random() * (arg1 - arg2) + arg2);
return my_number;
}
}