我的代码应该在字段中找到最大值并返回数字的索引。如果它们是具有相同编号的索引,则应返回该对(或组)的较低索引。但是,当我所有的数字均为负数时,我的代码将不起作用。它始终返回0,这是bestIndex的默认值。您能帮我解决我的代码吗?谢谢
这是我的代码:
int bestIndex = 0;
for (int i = 0; i < field.length; i++) {
bestIndex = field[i] > field[bestIndex] ? i : bestIndex;
}
return bestIndex;
答案 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
,并且您只能传递长度为5
或Array
的副本:
[-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个负数,则将返回较大的负数。