int [8,4,9,10,34,54,56];
1.查找列表//4
的最小值。
1.从列表//[8,4,9]
中删除min及其相邻元素。
1.将min加到整数变量sum。对剩余的元素//[10,34,54,56]
重复上述步骤。
1.输出为单个整数和=68(4 + 10 + 54)。// remaining element in list is [56]
我尝试了这种方式,这段代码保持运行(不打印任何东西)预期输出:68岁
List<Integer> ques=new ArrayList<>(Arrays.asList(8,4,9,10,34,54,56));
int l=ques.size();
int sum=0,min,index;
while(l>=1){
min=Collections.min(ques);
sum+=min;
index=ques.indexOf(min);
if(index==0 && l>2){
ques.remove(index);
ques.remove(index+1);
l-=2;
}
else if(index==0 && l==2){
ques.remove(index);
l--;
}
else if(index!=0 && l>2){
ques.remove(index-1);
ques.remove(index);
ques.remove(index+1);
l-=3;
}
}
System.out.println(sum);
字符串
4条答案
按热度按时间irtuqstp1#
代码的问题是while循环条件没有正确更新。它当前检查l是否大于或等于1,但它永远不会在循环内部更改l的值。因此,循环将无限期运行,并且永远不会打印任何内容。
要修复代码,您可以根据每次迭代中删除的元素数量在循环中更新l。您还可以通过使用带有适当索引的单个remove()调用来简化if-else语句。
下面是更正的代码:
字符串
输出
x1c 0d1x的数据
pxyaymoc2#
是的,因为你没有在while循环中更新
l
的值,这会导致一个无限循环,所以你需要在每个条件块中更新l
的值,从ques
列表中删除元素!看看这个
字符串
von4xj4u3#
你的代码中有四个错误。(实际上,你有三个不同的错误,因为你犯了两次同样的错误。
1.从
List
中删除一个元素后,列表中的元素减少了一个,并且每个剩余元素的索引都比删除前少了一个。因此,当您这样做时:ques.remove(index);
,删除之前位于index + 1
的元素现在位于index
。你犯了两次这样的错误。1.当
List
只有两个元素时,最小元素(即min
)处于索引0(零)或索引1(一)。你得把它取出来。(请尝试在List
仅包含8和4时运行代码。while
条件将总是为真-因为List
永远不会删除其所有元素。这就是为什么 * 代码不断运行 * -它处于无限循环中。因此,条件应该是l > 1
。如果使用调试器单步调试代码,并在每个
remove
操作之后查看ques
的内容,您将看到第一个错误。下面是正确的代码:
字符串
dfty9e194#
如果您关心优化,请记住,从
ArrayList
中删除元素是非常无效的。您应该考虑更合适的数据结构,如Map
:字符串