2015-12-09 70 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