字段中最大数字的索引

时间:2018-12-02 20:16:09

标签: java

我的代码应该在字段中找到最大值并返回数字的索引。如果它们是具有相同编号的索引,则应返回该对(或组)的较低索引。但是,当我所有的数字均为负数时,我的代码将不起作用。它始终返回0,这是bestIndex的默认值。您能帮我解决我的代码吗?谢谢

这是我的代码:

int bestIndex = 0;
for (int i = 0; i < field.length; i++) {
    bestIndex = field[i] > field[bestIndex] ? i : bestIndex;
}

return bestIndex;

3 个答案:

答案 0 :(得分:1)

所以问题是您有100个元素的Array,而您只填充了其中一些。因此,当Array的填充部分全部为负数时,您的方法将返回0,这是未填充索引的默认值。我要做的是拥有一个计数器来跟踪您已填充了多少索引。然后,当您调用该方法时,您可以传递计数器并循环直到计数器:

for (int i = 0; i < count; i++) 
{   
    bestIndex = field[i] > field[bestIndex] ? i : bestIndex;
} 

或者您可以使用Arrays.copyOf()将其传递为:

biggestIndex(Arrays.copyOf(field, count));

这将传递原始Array的副本,该副本将被截断为仅填充的元素数量,以便如果您拥有Array

[-1, -4, -34, -7, -39, 0, 0, 0, 0, 0, ....]

计数为5,并且您只能传递长度为5Array的副本:

[-1, -4, -34, -7, -39]

答案 1 :(得分:1)

如果您已检查数组不为空或为null,并在执行for循环之前设置了bestIndex=0,则代码应该可以。

我也建议您将括号放在布尔表达式(field[i] > field[bestIndex])上,将数组传递给返回bestIndex的方法可能会更好。

无论如何,如果您想要替代方案,我建议您做这样的事情:

  for ( int i = 0; i < field.length; i++ ){
      if ( field[i] > field[bestIndex] ) bestIndex = i;
  }
  return bestIndex; 

答案 2 :(得分:1)

在您的评论之一中,您说:

  

[0,0,0,-5,-4,-2,-1]。我希望我的代码返回-1,但是我的代码   总是返回0

最后,您会显示自己真正想要的。
您不希望数组较大项目的索引,而是较大项目本身的索引,只希望否定项之中的
但是您提供的代码将返回较大项目的索引。
因此更改为此(我正在使用您的代码逻辑):

int greater = Integer.MIN_VALUE;
for (int i = 0; i < field.length; i++) {
    if (field[i] < 0)
        greater = field[i] > greater ? field[i] : greater;
}
return greater;

如果存在至少1个负数,则将返回较大的负数。