java 为数组中的索引赋值

e5njpo68  于 2023-02-28  发布在  Java
关注(0)|答案(4)|浏览(148)

我有一个整数数组

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]
fiei3ece

fiei3ece1#

我们希望mynumber〉=数组当前索引中的数字:

int distance = mynumber - cells[0];
int idx = 0;

for(int c = 1; c < cells.length; c++) {
    if (mynumber >= cells[c]) {
        int cdistance = mynumber - cells[c];
        if (cdistance < distance) {
            idx = c;
            distance = cdistance;
        }
    }
}
int choosennumber = cells[idx];

这是假设mynumber >= cells[0]

tzdcorbm

tzdcorbm2#

您可以使用Groovy为集合提供的min/max函数,您基本上希望列表中的数字最大,小于您的限制。

def findLimit(list, limit) {
  list.max{ it <= limit ? it : -it }
}

def cells = [ 242, 215, 230, 243, 252, 244]

assert 215 == findLimit(cells, 10)
assert 215 == findLimit(cells, 225)
assert 243 == findLimit(cells, 243)
assert 252 == findLimit(cells, 1000)

注意:如果列表是排序的,则for循环和达到限制后的短路会更有效。

2w3kk1z5

2w3kk1z53#

不要使用数学.abs;求两个数之差,保持正值,这样你会得到215而不是230。

int distance = cells[0] - mynumber

以及

int cdistance = cells[c] - mynumber
jvlzgdj9

jvlzgdj94#

这是使用TreeMap的一个不可抗拒的机会:

TreeMap<int, int> map = new TreeMap<int, int>([0: 1, 215: 2, 230: 3, 243: 4, 252: 5])
int idx = map.lowerEntry(225).value
assert idx == 2

相关问题