我有一个整数数组
int[] cells= new int[6]
cells[0] = 0
cells[1] = 0
cells[2] = 215
cells[3] = 230
cells[4] = 243
cells[5] = 252
我正在尝试检查此数组中的另一个数字,并指定它所属的索引。例如:如果我使用数字243,我想从数字243中得到单元格4,这绝对可以工作,我下面的代码,如果mynumber是220,它分配给215,但问题是,如果我的数字是225,它就分配给230,这也是寻找最接近的数字的正确方法,但是我想把225分配给215(索引#2)而不是230。它应该只在数字为230或福尔斯230-242范围内时才赋值。获取它的最佳方法是什么?请帮助。
我的代码是:
def mynumber = 225
int distance = Math.abs(cells[0] - mynumber )
int idx = 0
for(int c = 1; c < cells.length; c++)
{
int cdistance = Math.abs(cells[c] - mynumber )
if(cdistance < distance)
{
idx = c
distance = cdistance
}
}
int choosennumber= cells[idx]
4条答案
按热度按时间fiei3ece1#
我们希望
mynumber
〉=数组当前索引中的数字:这是假设
mynumber >= cells[0]
。tzdcorbm2#
您可以使用Groovy为集合提供的
min/max
函数,您基本上希望列表中的数字最大,小于您的限制。注意:如果列表是排序的,则
for
循环和达到限制后的短路会更有效。2w3kk1z53#
不要使用数学.abs;求两个数之差,保持正值,这样你会得到215而不是230。
以及
jvlzgdj94#
这是使用
TreeMap
的一个不可抗拒的机会: