Scanner Line Error

I call the Scanner.nextLine() method from two different scanner objects in two different ways. Sometimes, when I call Scanner.nextLine() from the second method, it gives me a "line unreachable" error. What could be the problem?

 import java.util.Scanner; public class TicTacToe { private final String COMPUTER = "computer"; private final String PLAYER = "player"; /** * Asks the user to choose a letter ('X' or 'O') * and checks if the input is valid. */ public void askLetter() { System.out.println("Please enter 'X' or 'O': "); Scanner input = new Scanner(System.in); String letter = input.nextLine().toUpperCase().trim(); while (!letter.equals("X") && !letter.equals("O")) { System.out.println("Please enter 'X' or 'O': "); letter = input.nextLine().toUpperCase().trim(); } input.close(); } /** * Asks the user to choose who goes first. * @return 'computer' or 'player' */ public String decide() { //System.out.println("Choose who goes first('player' or 'computer'): "); Scanner input = new Scanner(System.in); String first = input.nextLine().toUpperCase().trim(); while (!first.equals(COMPUTER) && !first.equals(PLAYER)) { System.out.println("Choose who goes first('player' or 'computer'): "); first = input.nextLine().toUpperCase().trim(); } input.close(); return first; } public static void main(String[] args) { TicTacToe tictac = new TicTacToe(); tictac.askLetter(); tictac.decide(); } } 
+4
source share
1 answer

Your askLetter method closes the scanner ... which closes System.in . Then you try to reuse System.in inside decide .

Modify the constructor to accept the Scanner that you create in main . Then save this scanner in the field and use it in both methods:

 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); TicTacToe tictac = new TicTacToe(scanner); tictac.askLetter(); tictac.decide(); // You might want to close the scanner here, but you don't really have to. } 

It also helps make your code more reliable - now you can use Scanner , which is supported by fake data (for example, a StringReader ).

+10
source

Source: https://habr.com/ru/post/1481441/


All Articles