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;

并且您的程序将按照您的意愿运行,不会再运行陷入无限循环。