2013-10-09 4 views
0

Я создал программу, которая запрашивает 3 целых числа для вывода типа треугольника. Все работает и успешно скомпилирован, однако, кажется, та часть, где он запрашивает у пользователя, чтобы увидеть, если они хотят, чтобы цикл снова, интернет-компилятор выдает ошибку:Scanner NoSuchElementException

Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:838) at java.util.Scanner.next(Scanner.java:1347) at Assignment5.main(Assignment5.java:56)

import java.util.Scanner; 
    public class Assignment5 { 

    public static void main (String[]args) 
    { 


     for (int a = 0; a < Integer.MAX_VALUE; a++) 
     { 
     Scanner userInput = new Scanner(System.in); 
     Scanner answer = new Scanner(System.in); 

     int x,y,z; 

     System.out.println("Enter the sides of the triangle: "); 


     x = userInput.nextInt(); 
     y = userInput.nextInt(); 
     z = userInput.nextInt(); 
     Tri isos = new Tri(x,y,z); 
     Tri equal = new Tri(x,y,z); 
     Tri scalene = new Tri(x,y,z); 



      // check the equilateral triangle 
      System.out.println(equal.toString() + " triangle:"); 


      if (equal.is_isosceles()) 
      System.out.println("\tIt is isosceles"); 
      else 
      System.out.println("\tIt is not isosceles"); 

      if (equal.is_equilateral()) 
      System.out.println("\tIt is equilateral"); 
      else 
      System.out.println("\tIt is not a equilateral"); 

      if (equal.is_scalene()) 
      System.out.println("\tIt is scalene"); 
      else 
      System.out.println("\tIt is not scalene"); 

      System.out.println("Would you like to enter values again? (y/n)"); 

      String input = answer.next(); //Exception is thrown from here 

      if (input.equals("y")) 
      { 
       System.out.println("ok"); 
      } 
       else if(!input.equals("y")) 
       { 
        System.out.println("Ok, bye."); 
        break; 
       } 

     } 
    } 
    } 
+0

Что находится на линии 56? Мне также интересно, зачем вам 2 сканера. –

+0

Строка 56: Строка input = answer.next(); \t \t , если (input.equals ("у")) \t { \t \t System.out.Println ("хорошо"); \t} \t еще если \t { \t \t System.out.println ("Хорошо, до свидания.") (Input.equals ("у")!); \t \t break; \t} – Ryan

+0

Протестировано, и оно отлично работает для меня. – Aneesh

ответ

1

NoSuchElementException:

Thrown by the nextElement method of an Enumeration to indicate that there are no more elements in the enumeration.

вы получаете это исключение, потому что Scanner#nextне читать символ новой строки, который является символом при нажатии клавиши ввода (\n), так что в следующем for Итерация, вы пытаетесь ее прочитать, что вызывает исключение.

Одним из возможных решений является добавление answer.nextLine() сразу после answer.next(), чтобы ласточка этот дополнительный \n.


Пример кода:

Iteration (a) | input for scanner | Data for scanner 
--------------+-----------------------+------------------- 
     0  | "Hello" (And enter) |  Hello 
     1  |   \n   |  PROBLEM! 
+0

Я попытался включить это, но я не понимаю, как это сделать. – Ryan

+0

Пробовал это и все еще получал такую ​​же ошибку. – Ryan

+0

Куда вы разместили его? – Maroun

0

мне кажется, что answer.next() на самом деле не имеет никакого значения, присвоенного ему обычно ИНТ имя = answer.next имя() является что когда-либо отвечал. Я имею в виду, что имя can not присваивается значение, потому что answer.next() его не имеет.

По крайней мере, это мое понимание. Альтернативой является избавление от answer.next и использование другого сканера. Фактически это редактирование.

сканер считывает файлы или пульт. У вас уже есть один сканер (userInput), второй сканер фактически ничего не делает, а сам он является реальным сканером, ему нечего читать. избавиться от ответа в виде сканера, заменить с помощью int, String, double и иметь int answer = userInput.nextInt(); или double answer = userInput.nextDouble(); или Строковый ответ = userInput.nextLine();

0

Как вы сказали, код работает для вас, но не компилируется и не выполняется в онлайн-компиляторе. Сканер ответов исчерпан, потому что он не имеет никаких элементов.

Это неловко, но я когда-то получал ту же ошибку при компиляции моего кода в онлайн-компиляторе, оказалось, что я заранее не вводил ввод в раздел ввода и ожидал, что он-лайн компилятор запросит ввод.

Поскольку вы используете два сканера для ввода ввода с консоли, попробуйте использовать userInput сканера, чтобы вместо этого использовать вход из файла. (Он может различаться для разных онлайн-компиляторов, но есть возможность предоставить ввод из файла)

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