在这段代码中,我正在搜索一个包含以下内容的数组列表:
[1,1,2,1,2,1,1,1,1,1,1,1,1,1,1]
我编写了代码来查找ArrayList中最高值的索引,然后将这些索引附加到一个名为的新ArrayList中
int high = findRelevance.get(0);
ArrayList<Integer> IndicesOfHighest = new ArrayList();
for (int iiii = 0; iiii < findRelevance.size(); iiii++)
{
if (findRelevance.get(iiii) > high)
{
IndicesOfHighest.clear();
IndicesOfHighest.add(iiii);
}
if (findRelevance.get(iiii) == high)
{
IndicesOfHighest.add(iiii);
}
}
我希望得到回报:[ 2, 4 ]
,但我得到的却是:
[4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
- 您永远不会更新
high
- 因为没有
else if
子句,如果你修复了它,你最终会得到[2, 2, 4]
更一般地说,学习调试。程序员通常不会变成绝对可靠的机器。使用调试器,或者如果你没有时间或耐心学习如何使用调试器,可以添加大量System.out.println语句:其想法是跟随代码,使用笔和纸或在脑海中计算代码应该做什么。你发现你认为应该发生的事情和实际发生的事情之间存在差异的那一刻?你发现了一个bug,通常有足够的上下文来知道出了什么问题。
[1,1,2,1,2,1,1,1,11,1,1,1,10,1,1,1,1.1]
int high = findRelevance.get(0);
即高=1。您从未更新high的值。所以,
if (findRelevance.get(iiii) == high)
由于每当findRelevance.get(iii(==1(high总是1(时都会出现上面的行,如果块被执行。
因此,当high的值为2时,您需要更新它。
int high = findRelevance.get(0);
ArrayList<Integer> IndicesOfHighest = new ArrayList();
for (int iiii = 0; iiii < findRelevance.size(); iiii++)
{
if (findRelevance.get(iiii) > high)
{
IndicesOfHighest.clear();
IndicesOfHighest.add(iiii);
high = findRelevance.get(iii); //added line
}
if (findRelevance.get(iiii) == high)
{
IndicesOfHighest.add(iiii);
}
}