2017-04-23 5 views
-2

私は実際にスキャナの動作を取得しません。あなたが見ることができるように、次の行の入力を最初に、whileループで入力したいと思います。しかし、最初の入力後、私は以下のようにArrayOutOfBoundsExceptionを取得します。ただ次の行を入力したいということを無視します。唯一の解決策は、intとnew行を1行にスペースで区切って入力するときですが、これは私が望むものではありません。なぜなら、この時点で、ユーザーは最初のintの後に何を入力するのか分からないからです。Javaスキャナは次の入力を期待していないので、nextLine()を無視します

Scanner scanner = new Scanner(System.in); 
     int i = scanner.nextInt() - 1; 
     logic.setGameField(games.get(i).getGameField()); 

//  scanner.reset(); //what does that do? 

     view.displayField(logic.getCompleteGameField(), logic.getGameSize(), logic.getCompleteGameSize()); 

     double time = System.currentTimeMillis(); 


     while (!logic.gameIsFinished()) { 
      System.out.println("Spalte Reihe Zeichen: X/*"); 

      String s = scanner.nextLine(); 

      char[] tmp = s.toCharArray(); 

      //just for testing 
      System.out.println(s.length()); //outputs: 0 
      System.out.println(tmp.length); //outputs: 0 
      for (int j = 0; j < tmp.length; j++) { 
       System.out.print(tmp[j] + " " + j);  
      } 
      System.out.println(); 

      logic.setSingleField(tmp[1] - CHAR_TO_INT_OFFSET_ROW, tmp[0] - CHAR_TO_INT_OFFSET_COLUMN, tmp[2]); //throws as expected ArrayIndexOutOfBoundsException 
+1

'System.out.println(s.length()); // outputs:0'だから 'tmp [2]'、 'tmp [1]'や 'tmp [0]'を使うときに何を期待していますか? –

答えて

1

これは、Scanner.nextInt()が次の行に移動しないためです。この時点では、現在の入力行にいます。あなたができることはScanner.nextInt()の後に追加のScanner.nextLine()を呼び出すことです:

int i = scanner.nextInt() - 1; 
scanner.nextLine(); 
logic.setGameField(games.get(i).getGameField()); 
+0

ありがとう、それは助けになった! – EscapeTheEvilSpell

関連する問題