我有一系列正/负的整数
int[] numbers = new int[10];
numbers[0] = 100;
numbers[1] = -34200;
numbers[2] = 3040;
numbers[3] = 400433;
numbers[4] = 500;
numbers[5] = -100;
numbers[6] = -200;
numbers[7] = 532;
numbers[8] = 6584;
numbers[9] = -945;
Run Code Online (Sandbox Code Playgroud)
现在,我想针对这个数组测试另一个int,并返回最接近int的数字.
例如,如果我使用数字,490我会从数字中取回第4项500,这样做的最佳方法是什么?
int myNumber = 490;
int distance = 0;
int idx = 0;
for(int c = 0; c < numbers.length; c++){
int cdistance = numbers[c] - myNumber;
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
int theNumber = numbers[idx];
Run Code Online (Sandbox Code Playgroud)
这不起作用.有关一个好方法的任何建议吗?
Chr*_*yes 42
int myNumber = 490;
int distance = Math.abs(numbers[0] - myNumber);
int idx = 0;
for(int c = 1; c < numbers.length; c++){
int cdistance = Math.abs(numbers[c] - myNumber);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
int theNumber = numbers[idx];
Run Code Online (Sandbox Code Playgroud)
始终使用您正在考虑的第一个元素初始化最小/最大函数.使用类似的东西Integer.MAX_VALUE或者Integer.MIN_VALUE是一种天真的方式来获得答案; 如果稍后更改数据类型(哎呀,MAX_LONG并且MAX_INT非常不同!)或者将来想要min/max为任何数据类型编写泛型方法,它都不会很好.
Ole*_*hov 15
在Java 8中:
List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());
int n = 490;
int c = list.stream()
.min(Comparator.comparingInt(i -> Math.abs(i - n)))
.orElseThrow(() -> new NoSuchElementException("No value present"));
Run Code Online (Sandbox Code Playgroud)
最初,您可以使用a List而不是Array(列表具有更多功能).