2016-12-02 12 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) 

私はIdeone.comで実行しているときにエラーが発生しているようですが、Eclipseを実行してもうまくいきます。Scannerクラスでこのエラーを解決するにはどうすればよいですか?スレッド「main」の例外?

+0

ideoneはコンソールから読み込む方法がありません。AFAIK –

答えて

0

これは本当に不思議です。 Scanner(Java 6とJava 8)の標準バージョンの公開されたソースコードによれば、その時点でその例外を取得できる唯一の方法は、Scannerオブジェクトですでに何かがclose()を呼び出している場合です。

Scannerオブジェクトのプライベートclosedフラグがtrueであれば、あなたはすでに閉鎖された入力ストリーム、またはダミー、またはnullの周りにスキャナをインスタンス化した場合、あなたは別の例外になるだろうということ。これは、特定の例外にのみ起こります、 Scanner.close()に電話すると発生します)。

しかし、あなたが私たちに示したコードでは、それはできません。 Scannerは、ループを終了した後でのみ閉じることができます。

私は2つだけの説明と考えることができます:これは、あなたがideoneに走ったコードではありません

  1. 皆様はideoneを実装しており、標準Scannerクラスの動作を微調整しています。私には不可解なやり方で。
関連する問題