Tichaona J Ответов: 3

Ожидание ввода пользователем (класс сканера)


Проблема, с которой я сталкиваюсь здесь, заключается в том, что во время выполнения пользователя просят ввести там номер 0-9, а затем, прежде чем он получит шанс ввести там номер, он прыгает, чтобы сказать: “вы ввели: null”. Очевидно, что ничего не читается. Ранее использовался класс BufferedReader, но позже выяснилось, что он предлагает меньше по сравнению с классом scanner. Эффективно то, что я хочу, чтобы приложение ждало, пока пользователь введет там номер, а затем отобразит пользовательский ввод, чтобы пользователь мог проверить свой выбор, прежде чем продолжить.

switch (user_choice) {

            case 1:  
            
           //Ask the user for there input...  <<<<
             System.out.println("Please enter a number..."); 			  			 
   			 
             try{
            	 
            	 Scanner sc1 = new Scanner(System.in);            	 
            	
             
             this.value_1 = Integer.parseInt(sc1.nextLine());
             
             
             
             //sc1.close();
             
             
             }catch (Exception e) {
				// TODO: handle exception
            	 
            	 
			}
             
             
   		  
             System.out.println("You entered:" + this.value_1);


Что я уже пробовал:

1. Changed  from using BufferedReader class to scanner class as it many have a method that may assist me in achieving my goal.

3 Ответов

Рейтинг:
1

Patrice T

Цитата:
Очевидно, что ничего не читается.

Очевидно, что у вас есть структура try-catch, которая не позволяет вашему приложению сообщать вам, что идет не так.
Первое, что нужно сделать, это удалить try-catch, чтобы получить осмысленное сообщение об ошибке.


Рейтинг:
1

Sven Piehl

На этом этапе нет необходимости использовать класс-оболочку, чтобы получить введенное вами однозначное число.

Вы можете использовать просто:

int value = sc1.nextLine().charAt(0) - '0';


Имейте в виду, что этот код будет аварийно завершать работу, когда не было дано никаких входных данных. Вы должны предпочесть обработку исключений:

try { 
  this.value_1 = sc1.nextLine().charAt(0) - '0';
}catch( NullPointerException | StringIndexOutOfBoundsException e) {
  System.err.println("Invalid input.");
}


Если вы просто хотите прочитать эту единственную однобайтовую информацию, вы можете избежать использования Сканер класс и получить входные данные непосредственно из InputStream.

Системы.в.читать() ( от InputStream ) метод считывает один байт из stdin, имейте в виду, что это может выбросить IOException если есть какие-то ошибки.

try { 
  this.value_1 = System.in.read() - '0';
}catch( IOException e) {
  System.err.println("Could not read from the input stream: " + e.getMessage());
}


Рейтинг:
0

Richard MacCutchan

Видеть Сканер (Java Platform SE 7 )[^]. И нет никакого смысла использовать конструкцию try/catch, если вы собираетесь игнорировать все исключения.