2013-01-30 5 views
1

У меня возникла проблема с тем, чтобы мой объект Scanner читал ввод пользователя. Я хочу, чтобы сканер читал пользовательский ввод и сохранял ввод в массив байтов.Java Scanner No Line Found, не дожидаясь ввода пользователя

Если я использую следующий код:

import java.util.Scanner; 

public class ExamTaker { 
    public static void main(String[] args) { 
     // Variable Declaration 
     char[] studentTest = new char[20]; 

     // Input Setup 
     Scanner keyboard = new Scanner(System.in); 

     // Take the test 
     for (int i = 0; i < studentTest.length; i++) { 
      System.out.print("\nAnswer " + (i+1) + " : "); 
      studentTest[i] = keyboard.nextLine().charAt(0); // The troubled line 
     } 
    } 
} 

Я получаю сообщение об ошибке исключения следующим образом:

Answer 1 : Exception in thread "main" java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Unknown Source) 
    at ExamTaker.main(ExamTaker.java:14) 

Изучив через переполнение стека и Google, я принял предложение, чтобы поместить мой беспокойный в следующем порядке:

// Take the test 
     for (int i = 0; i < studentTest.length; i++) { 
      System.out.print("\nAnswer " + (i+1) + " : "); 
      try { 
       studentTest[i] = keyboard.nextLine().charAt(0); 
      } 
      catch (Exception e) { 
       System.out.print("Exception found"); 
      } 
     } 

Однако это все равно не будет производиться ce желаемый результат, по моему мнению, является проблемой с тем, как я использую метод nextLine(). Он просто бросает буквально «Исключение найден» буквально перед каждым пронумерованным ответом.

Я также попытался изменить цикл for на цикл do-while и бросить в keyboard.getChar() в случае, если он не дошел до конца строки, но безрезультатно.

Как я могу заставить пользователя ввести строку, в которой я беру первый символ и назначить его моему массиву символов в этом экземпляре? Заранее спасибо за вашу помощь.

ответ

2

Scanner#nextLine() бросок NoSuchElementException whenno линия была найдена, вы должны probablymake вызова Scanner#hasNextLine(), прежде чем вызывать nextLine(), чтобы убедиться, что следующая строка существует в сканере.

for (int i = 0; i < studentTest.length; i++) { 
      System.out.print("\nAnswer " + (i+1) + " : "); 
      if(keyboard.hasNextLine()){ 
       studentTest[i] = keyboard.nextLine().charAt(0); // The troubled line 
      } 
     } 

Кроме того, я вижу, что вы просто хотите, чтобы принимать пользовательский ввод от сканера, почему бы не просто использовать Scanner#next()

for (int i = 0; i < studentTest.length; i++) { 
      System.out.print("\nAnswer " + (i+1) + " : "); 
      studentTest[i] = keyboard.next().charAt(0); // The troubled line 
     } 
+0

Спасибо за ваш ответ! Закрытие проблемной строки в предложенном условном выражении позволяет избежать исключения, но не позволяет вводить пользователя. Мое предположение заключается в том, что оно не передает условное утверждение из-за отсутствия такой строки, которая уже существует. Кроме того, использование «next()» дает мне то же «NoSuchElementException», что и раньше. –

Смежные вопросы