2016-12-02 33 views
-1
import java.util.Scanner; 

public class Main { 
    public static void main(String[]args) { 
    double num = 0; 
    double counter = 0; 
    double ncot = 0; 
    Scanner scan = new Scanner(System.in); 

    while (!(num == -1)) { 

     ncot = scan.nextDouble(); 
     if (ncot == -1) { 
      System.out.println("The average is: " + (double)(num/counter)); 
     } 
     else { 
      num = num+ncot; 
      counter++; 
     } 
    } 
    scan.close(); 
    } 
} 

Exception in thread "main" java.lang.IllegalStateException: Scanner closed 
at java.util.Scanner.ensureOpen(Scanner.java:1070) 
at java.util.Scanner.next(Scanner.java:1465) 
at java.util.Scanner.nextDouble(Scanner.java:2413) 

守則似乎在IM上運行它Ideone.com被觸發錯誤,但然而,當我在Eclipse中運行它的罰款。如何解決這個錯誤與掃描儀類:例外在線程「主要」 ......?

+0

ideone沒有任何方式從控制檯AFAIK讀取數據。 –

回答

0

這實在令人費解。根據已發佈的Scanner(Java 6和Java 8)標準版本的源代碼,在此時您可以獲得該例外的唯一方法是如果在Scanner對象上已經有某種東西已經調用close()

(請注意,如果你實例周圍已經關閉的輸入流,或假,或空掃描器時,你會得到一個不同的異常。如果Scanner對象的私有closed標誌true這種特殊的例外只發生,只有當您撥打Scanner.close()時纔會發生。)

但是隨着您向我們顯示的代碼,這是不可能的。該Scanner可以退出循環後才被關閉。

我能想到的只有兩種解釋:

  1. 這不是你ideone運行的代碼。
  2. 這些傢伙已經實施了ideone調整了標準Scanner類的行爲。以某種對我來說莫名其妙的方式。