2015-12-09 68 views
1

我遇到掃描儀類的問題。我有幾個方法從用戶讀取某些輸入,但是在調用第一個方法之後,其他方法會崩潰(無法讀取輸入)。我搜索瞭解決方案,它看起來像添加「scanner.nextLine()」將解決問題,但它沒有。使用多個掃描儀失敗 - Java

public class GameController { 

private int numberOfPlayers = 2; 

private Board board = new Board('.'); 
String players[] = new String[numberOfPlayers]; 
char playersMarkers[] = new char[numberOfPlayers]; 

public void getPlayersNames() { 
    Scanner input = new Scanner(System.in); 

    for (int i = 0; i < players.length; i++) { 
     System.out.print("Insert player " + (i + 1) + "'s name: "); 
     players[i] = input.nextLine(); 
    } 
    input.nextLine(); // <- this one was suppose to solve the problem 
    input.close(); 
} 


public static void main(String[] args) { 

    GameController gc = new GameController(); 
    gc.getPlayersNames(); 

    Scanner scanner = new Scanner(System.in); 

    int array[] = new int[5]; 
    for (int i = 0; i < array.length; i++) { 
     if (scanner.hasNext()) { 
     array[i] = scanner.nextInt(); 
     } 
    } 

    scanner.close(); 

    for (int i = 0; i < array.length; i++) { 
     System.out.println(array[i]); 
    } 

輸出:

Insert player 1's name: John 
Insert player 2's name: George 
1 
0 
0 
0 
0 
0 
+1

你認爲'scanner.close'有什麼用? – Pshemo

回答

1

你沒有得到來自任何scanner(在main方法),因爲你已經關閉System.in(收盤input時,在getPlayersNames方法結束)。

您不應該自己關閉System.in,因爲它會阻止將來嘗試從此流讀取任何內容。

+0

因此,如果我理解的很好,我應該在應用程序結束時只關閉一個Scanner實例,並且不要關閉其他任何實例? – Xiris