В чем проблема с этим кодом в Java? - PullRequest
0 голосов
/ 01 апреля 2011

Я хочу записать время с 0: 0 до 23:59 5 раз, но этот код запишет его в бесконечном цикле, я не могу остановить его, пока не выйду из затменияпроблема с этим?

class ido {
    public static void main (String[] args){
        int ora = 0;
        int perc = 0;
        System.out.println(ora + ": " + perc);

        for (int i = 1; i <= 5;){
        while (ora <= 24 && perc <= 60){
            perc++;
                if (perc == 60){
                    perc = 0;
                    ora++;
                }
                if (ora == 24){
                    ora = 0;
                    i++;
                }
                System.out.println(ora + ": " + perc);

                }
        }
    }
    }

Ответы [ 6 ]

3 голосов
/ 01 апреля 2011

Как отмечают другие, проблема в том, что цикл while никогда не может завершиться, потому что вы сбрасываете значения переменных управления цикла внутри цикла.

Более нормальный способ написать это - три вложенных цикла:

for (int day=1; day <= 5; day++) {
  for (int hour=0; hour <= 23; hour++) {
    for (int minute=0; minute <= 59; minute++) {
      System.out.println( hour + ":" + minute );
    }
  }
}
1 голос
/ 01 апреля 2011

Проблема в том, что вы никогда не выйдете из цикла while (поскольку ora и perc сбрасываются в 0). Таким образом, ваше условие для цикла не имеет значения.

1 голос
/ 01 апреля 2011

ora <= 24 && perc <= 60 </p>

ora никогда не будет 24 (потому что в первом IF это будет 0)

и perc никогда не будет 60 (потому чтов втором случае ставка будет установлена ​​на 0)

, что является причиной бесконечного цикла

1 голос
/ 01 апреля 2011

Ну, вы всегда сбрасываете свои значения ora и perc, чтобы цикл while никогда не прерывался.
Попробуйте сбросить значение ora до 0 до цикла while (вместо того, где вы это делаете сейчас).Таким образом время прекратится, когда ora будет 24, а после 5 повторений ваш for закончится.

1 голос
/ 01 апреля 2011
В цикле

отсутствует предложение, попробуйте добавить i = i; ora и perc никогда не становятся> 24 и> 60, поэтому цикл while никогда не прерывается.

1 голос
/ 01 апреля 2011

Почему вы пишете этот код таким образом? Есть гораздо лучшие способы сделать это проще.

class DoIt {
    public static void main(String[] args) {
        for(int i=0; i<5; i++) {
           for(int hour=0;hour<24; hour++) {
              for(int minute=0;minute<60;minute++) {
                 System.out.printf("%d:%d%n", hour, minute);
              }
           }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...