2014-01-25 118 views
3

這是我對這個站點的第一個問題,所以如果我發佈錯誤的東西,我很抱歉並希望得到反饋!這是一個家庭作業問題,雖然我似乎無法用這種方式標記它。Java程序在輸入循環時出現卡住一次

無論如何,代碼似乎編譯得很好(使用BlueJ),但是當我運行它時進入第一個while循環時卡住了。我添加了一些輸出行來查看問題出現的位置,第一個System.out在進入第一個while循環時從未發生過...... JVM只是繼續工作,直到我強制它重置爲止。我相信我的初始while循環應該運行4次,然後退出我使用過的值(5個學生,我從2開始),但它似乎沒有做任何事情,而且我對於我做錯了。

該程序完成後打算做什麼的摘要。

一系列學生走過一排儲物櫃。

  • 學生1打開所有的儲物櫃
  • 學生2關閉每秒更衣室
  • 學生3反轉每三個更衣室等的狀態的學生人數

我知道我還沒有設置boolean locker標誌正確翻轉,並且打算在第二個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)); 
    } 

} 
+1

的[標籤:功課]標籤被禁用,因爲很多人推斷功課問題是不允許的。只要提問者展示他們的嘗試並表明自己努力解決問題,那麼家庭作業問題就沒有問題。你已經做到了,所以不用擔心! –

+0

哦,非常感謝你!刪除分號修復了問題。通常我的問題是忘記他們:)這個網站很棒,響應速度令人難以置信。 – Amber

回答

8

您的while循環後面有分號。

while (i <= studentNumber); 

這導致了無限循環,因爲你的i變量不能變化。

-3

你需要在你的while循環支架,除非它會無限運行 試試這個:

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

循環已經有括號。多餘的分號是問題。 –

+0

@no_answer_not_upvoted:你在說什麼?這不是第一個答案... – Makoto

+2

如果是這樣,那將是一個可怕的理由來upvote。 –