Top.Mail.Ru
Ответы

JAVA. Ошибка "Exception in thread "main" java.util.NoSuchElementException: No line found". Что это?

Программа такая:

import java.util.Scanner;

public class Figure2 {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Calc2 func = new Calc2();
String ans;
for (;;) {
System.out.println("Use These Commands:\n(cir)cle\n(sq)uare\n"
+ "(rec)tangle\n(ex)it");
ans = scan.nextLine();
scan.close();

if (ans.equals("ex"))
break;
switch (ans) {
case "cir":
func.areaCir();
break;
/*case "sq":
func.areaSq();
break;
case "rec":
func.areaRec();
break;
default:
System.out.println("Try again.");*/
}
}
}
}

import java.util.Scanner;

public class Calc2 {

void areaCir(){
double d=-1;
String str;
Scanner scan = new Scanner(System.in);
System.out.println("Input diameter:");
try {
str = scan.nextLine();
scan.close();
Double d1 = Double.valueOf(str);
d=d1;
} catch (NumberFormatException d1) {
System.err.println("Неверный формат числа. "); return;
}
if (d<0) System.err.println("Это невозможно, извините. ");
else System.out.println("S="+Math.PI*d);
}
}
До какого-то момента все работало нормально, потом стали появляться сообщения :
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at Calc2.areaCir(Calc2.java:11)
at Figure2.main(Figure2.java:19)

Откатывалась назад, не помогло. Просто сканер работает. Как только появляется вызов в другом классе, нет. До этого вызывала в другом классе его, все нормально было, что случилось? Что эта ошибка вообще означает?

По дате
По Рейтингу
Аватар пользователя
Новичок
9лет

Эх, Татьяна, написал я вам ответ уже лично. Но напишу тут что лучше писать ответы на toster.ru. Он специально для программистов и создан. Тут практически мало кто кому помочь может.

Аватар пользователя
Ученик
8лет

scan просто не закрывай, оставь его как есть и исключения не будет

Аватар пользователя
Искусственный Интеллект
9лет

а что ты в джаве понимаешь вообще говоря?

для чего там такое?
for (;;) {
чтобы бесконечно спрашивать новый ввод?
тогда за каким фикусом закрывать сканер после первого же ввода?

Аватар пользователя
Гуру
9лет

Что есть то и есть. Нет следующей линии для сканера. Стоит проверять для начала это :)

if(scan.hasNextLine()){
str = scan.nextline();
//...
}

Источник: <a rel="nofollow" href="http://stackoverflow.com/questions/7209110/java-ut" target="_blank">http://stackoverflow.com/questions/7209110/java-ut</a>