输入循环时,Java程序会出现一次卡住

时间:2014-01-25 19:56:00

标签: java while-loop

这是我对本网站的第一个问题所以我很抱歉,如果我发布错误的内容,我会很感激!这是一个家庭作业问题,虽然我似乎无法用这种方式标记。

无论如何,代码似乎编译得很好(使用BlueJ)但是在我运行它时进入第一个while循环时卡住了。我添加了一些输出行来查看问题发生的位置和第一个System.out进入第一个while循环时从未发生... JVM只是继续工作,直到我强制它重置。我相信我的初始while循环应该运行4次然后退出我使用的值(5名学生,我从2开始),但它似乎没有做任何事情,我不知道我是什么做错了。

完成后该计划的目的摘要。

一系列学生走过一排储物柜。

  • 学生1打开所有储物柜
  • 学生2关闭每一个储物柜
  • 学生3反转每三个储物柜等的状态

我知道我没有设置布尔锁定器标志来正确翻转并打算在第二个while循环中使用!myBool的变体 - 但首先我要确保我的while循环工作。希望我因为长时间盯着它而错过了一些简单的东西!

import java.util.Arrays;

public class Lockers
{
    public static void main (String[]args)
    {
        // Size of lockerArray
        int arraySize = 5;
        // Set up new lockerArray
        boolean[] lockerArray = new boolean[arraySize];

        // Variable for number of students in the exercise
        int studentNumber = 5;

        System.out.println("Student 1 opens all the lockers.\n");// Outputs, good
        // Student 1 opens all the lockers
        // Boolean values for lockerArray true = OPEN; false = CLOSED
        Arrays.fill(lockerArray, true);
        System.out.println(Arrays.toString(lockerArray)); // Outputs 5 true, good

        // Set the student counter at 2 (Student 1 has already made their pass)
        int i = 2;
        // Loop until you run out of students
        while (i <= studentNumber);
        {
            System.out.println("Student Number " + i + " is making their pass.\n");// NEVER HAPPENS - have to reset JVM to stop program
            // Set up a variable to control the sequence required (i.e., Student 2 every second locker,
            // Student 3 every third locker, etc.
            int j = i;
            while (j <= arraySize);
            {
                System.out.println("Student is changing the status of locker number " + j + ".\n");
                // Reverse the flag at each locker for which the statement is true for this student number
                // Need to reduce the variable by 1 as locker 1 would be sitting in lockerArray[0] position
                lockerArray[j-1] = false;
                // Increment locker number by the value of the student in the sequence
                j = j + i;
            }
            // Increment the student count
            i++;
        }
        // Print the final array status
        System.out.println(Arrays.toString(lockerArray));
    }

}

2 个答案:

答案 0 :(得分:8)

你的while循环后面有分号。

while (i <= studentNumber);

这导致无限循环,因为您的i变量无法更改。

答案 1 :(得分:-3)

你需要在while循环中使用括号,除非它无限运行 试试这个:

while (i <= studentNumber){
// action
}