Java编程,求解时遇到死循环。图像 link 到问题并提供了代码。
Java programming, encountered an infinite loop while solving. Image link to the question and the code is provided.
RoyalGame Problem
上面给出了问题的图像link。第一次迭代后我陷入了无限循环,有人可以帮助我吗?我也愿意接受其他解决方案,在此先感谢。
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;
并且您的程序将按照您的意愿运行,不会再运行陷入无限循环。
RoyalGame Problem
上面给出了问题的图像link。第一次迭代后我陷入了无限循环,有人可以帮助我吗?我也愿意接受其他解决方案,在此先感谢。
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;
并且您的程序将按照您的意愿运行,不会再运行陷入无限循环。