Java编程,在求解时遇到无限循环.提供了问题和代码的图像链接



皇家游戏问题

上面给出了问题的图像链接。第一次迭代后,我陷入了一个无限循环,有人能帮我吗。我也对其他解决方案持开放态度,提前谢谢。

static void compute(List<Integer> a){
boolean henrystatus=false;
while(true){
if(a.size()==0){
break;
}
else if(a.size()==1){
henrystatus=true;
break;
}
int mindex = a.indexOf(Collections.min(a));
List<Integer> temp=new ArrayList<Integer>();
for(int i=0;i<a.size();i++)
{
if(a.get(i)-mindex>0){
temp.add(a.get(i)-mindex);
}
} 
a.clear();
a=temp;

}
if(henrystatus)
System.out.print("Henry");
else
System.out.print("garry");
}

while(true(生成一个无限循环。

代码中的小逻辑问题,因为Java(或任何通用编程语言(中的索引都是从零开始的,我们自然会从一开始计算数字。因此,当最小值是第一个时,mindex变为零,因此,在数组中减去零(而不是实际的一(,每次都会得到相同的数组,并进入无限循环。

所以您只需要在索引中添加一个,同时从数组中查找最小索引。

只要换一下这条线,

int mindex = a.indexOf(Collections.min(a));

至,

int mindex = a.indexOf(Collections.min(a)) + 1;

您的程序将按您的意愿运行,不再运行到无限循环中。

最新更新