Java-программирование, столкнувшись с бесконечным циклом при решении.Имиджевая ссылка на вопрос и код предоставлены. - PullRequest
0 голосов
/ 08 декабря 2018

Проблема RoyalGame

Ссылка на изображение для этой проблемы приведена выше.Я застрял в бесконечном цикле после первой итерации, может кто-нибудь помочь мне, пожалуйста.Я также открыт для альтернативных решений, заранее спасибо.

 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");

    }

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Небольшая логическая проблема в вашем коде, потому что индексы в Java (или любом другом языке программирования в целом) начинаются с нуля, где мы, естественно, считаем числа из одного.Поэтому, когда минимальное число было первым, ваше mindex стало равным нулю, из-за чего в вашем массиве вычитался ноль (вместо фактически одного), каждый раз получая один и тот же массив и проходя бесконечный цикл.

Так что вам просто нужно добавить единицу в свой индекс при поиске минимального индекса из вашего массива.

Просто измените эту строку,

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

на,

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

И ваша программа будет работать так, как вы хотели, и больше не будет работать в бесконечном цикле.

0 голосов
/ 08 декабря 2018

while (true) создает бесконечный цикл.

...