这段代码在Java中有什么问题?

时间:2011-04-01 13:21:12

标签: java eclipse

我想写时间,从0:0到23:59进行5次,但是这段代码会把它写成无限循环,我无法阻止它,直到我不退出eclipse :)什么是这有问题吗?

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 个答案:

答案 0 :(得分:3)

正如其他人所指出的,问题是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 :(得分:1)

为什么用这种方式编写这段代码?有更好的方法可以做到这一点。

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

答案 2 :(得分:1)

for循环缺少一个子句,尝试添加i = i; ora和perc永远不会变成&gt; 24和&gt; 60,因此while循环永远不会中断。

答案 3 :(得分:1)

你总是重置你的ora和perc值,所以while循环永远不会破坏 尝试在while循环之前将ora值重置为0(而不是现在的位置)。这样,当ora为24时,while将会中断,并且在5次重复之后,你的for将结束。

答案 4 :(得分:1)

ora&lt; = 24&amp;&amp; perc <= 60

ora将永远不会是24(因为它将在第一个IF中设置为0)

和perc永远不会是60(因为它会在第二个IF中设置为0)

这是infintie循环的原因

答案 5 :(得分:1)

问题是你永远不会退出你的while循环(因为ora和perc被重置为0)。所以你在for循环中的条件是无关紧要的。