2013-10-09 201 views
0

我做了一個程序,要求3個整數輸出類型的三角形。一切運行和編譯成功,但是,它似乎在它要求用戶在看他們是否想再次循環它的一部分,在線編譯器輸出錯誤:掃描儀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

line 56: String input = answer.next(); \t \t 如果(input.equals( 「Y」)) \t { \t \t System.out的。的println( 「OK」); \t} \t否則,如果 \t { \t \t的System.out.println( 「好吧,再見。」)(input.equals( 「Y」)!); \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.next()之後添加answer.nextLine()燕子這個額外\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()的名字是分配了什麼答案是。我的意思是名稱不能被賦值,因爲answer.next()沒有。

至少這是我的理解。另一種方法是擺脫answer.next並使用其他掃描儀。 實際上是對此進行編輯。

掃描儀從文件或控制檯讀取。你已經有一臺掃描儀(用戶輸入),第二臺掃描儀實際上並沒有做任何事情,它是一臺真正的掃描儀,它沒有任何可讀的內容。 擺脫作爲掃描儀的答案,替換是用int,String,double和 int answer = userInput.nextInt(); 或 double answer = userInput.nextDouble(); 或 String answer = userInput.nextLine();

0

正如你所說的代碼爲你運行,但沒有編譯和執行在線編譯器。答案掃描器已經耗盡,因爲它沒有任何元素。

這很令人尷尬,但是我在編譯在線編譯器時編譯我的代碼時遇到了同樣的錯誤,事實證明,我並未事先向輸入部分提供輸入,並期望在線編譯器要求輸入。

由於您正在使用兩臺掃描儀從控制檯獲取輸入,請嘗試使用掃描儀userInput從文件中接受輸入。 (它可能會因不同的在線編譯器而有所不同,但可以選擇從文件中提供輸入)