2016-12-02 4 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), единственный способ получить это исключение в этом случае - это то, что уже вызвало close() на объекте Scanner.

(Обратите внимание, что если вы инстанцирован сканер вокруг входного потока, который уже был закрыт, или фиктивным, или нуля, вы получите другое исключение. Это особое исключение происходит только тогда, когда частный closed флаг Scanner объекта является true, и это происходит только при звонке Scanner.close().)

Но с кодом, который вы нам показали, это невозможно. Scanner может быть закрыт только после выхода из цикла.

я могу думать только два объяснения:

  1. Это не код, который вы запускали на ideone.
  2. Ребята внедрили ideone, изменили поведение стандартного класса Scanner. В некотором смысле это необъяснимо ... для меня.

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

  • Нет связанных вопросов^_^