【发布时间】:2012-10-30 09:39:06
【问题描述】:
我有一个正/负整数数组
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;
现在,我想针对这个数组测试另一个 int,并返回最接近 int 的数字。
例如,如果我使用号码 490,我会从号码 500 中取回第 4 项,这样最好的方法是什么?
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];
这行不通。有什么好的方法可以做到这一点吗?
【问题讨论】:
-
cdistance = numbers[c] - myNumber。您没有采用绝对值。 -
您需要从
distance开始,它等于某个非常大的数字。否则,cdistance永远不会小于它。另外,比较之前需要取cdistance的绝对值。