2016-11-26 100 views
0

我的任務是創建銀行模擬。到目前爲止,我所取得的進展是生成隨機的Client對象,使Teller的4個對象,將Client對象放入一個循環隊列中,並將一個客戶端放入一個空的Teller(如果有的話)。即使條件仍然成立,雖然循環不會繼續

我現在的問題是我所做的while循環不會繼續,即使設置條件仍然爲true,它只能執行5次。該程序仍然運行。

這是我迄今(假設所有的變量聲明)代碼:

public void run() { 
    int counter = 1; 
    populateTellers(windowArray); 
    while (counter < 10) { 
     newClient = generateClient(); 

     System.out.println(newClient.toString() + " arrived at :" + counter); 
     System.out.println(); 

     clientQueue.enqueue(newClient); 
     clientList.add(newClient); 
     System.out.println("The Queue now contains " + clientQueue.numberOfOccupiedCells() + " Client(s):"); 
     for (int x = 0; x < clientList.size(); x++) { 
      System.out.println(clientList.get(x).toString()); 
     } 
     System.out.println(); 

     arrayIndex = getATeller(windowArray); 
     if (arrayIndex != -1) { 
      clientList.remove(0); 
      clientQueue.dequeue(); 
      windowArray[arrayIndex].setClient(newClient); 
      windowArray[arrayIndex].setServiceTime(newClient.getDuration()); 
      System.out.println(windowArray[arrayIndex].getName() + " now serves " + newClient.toString()); 
     } else { 
      for (int x = 0; x < clientList.size(); x++) { 
       if (windowArrray[arrayIndex].getServiceTime() == counter) { 
        windowArray[arrayIndex].setClient(new Client()); 
        System.out.println(windowArray[arrayIndex].getName() + " ends service for " + newClient.toString()); 
       } 
      } 
     } 
     counter++; 
    } 
} 

的一兩件事,我不能讓周圍的頭,當我從aI = getATeller(wA);刪除代碼「,直到程序將在其下面的if語句的結尾括號中起作用。我嘗試將塊放入方法中,改變if(){}和else {}中代碼的位置,並將條件更改爲if(aI==1),但我沒有得到任何改進。任何想法我做錯了什麼?

編輯:所以我已經能夠縮小到一行代碼是windowArray[arrayIndex].setServiceTime(newClient.getDuration());,只要我給出納員的服務時間值問題會發生,我檢查了我的櫃員班,那裏沒有錯誤。任何想法如何我可以解決這個問題。

+0

循環不會削減它。使用線程和並行。 –

+2

你知道Java支持超過2個字符的變量名稱,對吧?所以你可以給他們有意義的名字,並讓你的代碼可以理解。我的建議是重構代碼,然後使用調試器來遍歷代碼並找出發生的情況。 –

+2

這是線程的代碼嗎? –

回答

0

試圖找到您的循環被轉向無限循環,

試着寫報表打印,只要有必要,只是爲了尋找執行流程。

然後打印出你的變量值,檢查它們是否如預期的一樣,繼續縮小範圍,因爲你發現在某個範圍內發生了錯誤,那麼你會發現罪魁禍首,如果它引導你到另一個函數,那麼徹底檢查特定的功能。

+0

爲什麼不只是使用調試器? –

2

爲什麼它只執行5次?根據代碼,counter用於檢查是否應該繼續循環。 counter更改的唯一情況是最後一行:counter++

我可以猜到,你在櫃檯上做了一個System.out.print,它最終達到5,它神奇地停下來。最有可能的是拋出一個異常,這個異常沒有被捕獲,並且在虛空中丟失。

編輯:如果這段代碼正在另一個線程上運行,那麼它可能掛在某個函數上。做爲told here