Не могу разобраться с особенностями Scanner. Почему здесь выходит "Exception in thread "main" java.util.NoSuchElementException: No line found"?
import java.util.Scanner;
public class TestClass {
public static void main(String[] args) {
float x = getFloatValue("Узнаем стоимость x %s/шт. - ", "RUB", 0, 10_000, false); // Здесь всё хорошо, метод работает
System.out.println(x);
float y = getFloatValue("Узнаем стоимость y %s/шт. - ", "USD", 0, 10_000, false);
// А ЗДЕСЬ У МЕНЯ ВЫХОДИТ ОШИБКА:
// Exception in thread "main" java.util.NoSuchElementException: No line found
// at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
// at TestClass.getFloatValue(TestClass.java:30)
// at TestClass.main(TestClass.java:12)
System.out.println(y);
}
static float getFloatValue(String text, String sCurrency, float start, float end, boolean including) {
boolean a = false;
float x=0;
Scanner in = new Scanner(System.in);
while (!a) {
System.out.printf(text, sCurrency);
String str = in.nextLine();
try {
x = Float.valueOf(str.trim().replace(",", "."));
}
catch (Exception ex) { System.out.println("Ошибка принятия значения. Необходим повторный ввод."); }
if(including == true && x>=start && x<=end) {a = true; }
else if(including == false && x>start && x<end) {a = true; }
else { System.out.println("Ошибка! Необходимо ввести корректное значение."); }
}
in.close();
return x;
}
}
Ответы (1 шт):
Автор решения: had0uken
→ Ссылка
Уберите строку in.close(); и все заработает. Сам сканнер не является ресурсом, требующим освобожения. Таковым является InputStream переданный в него. И закрывая сканнер, вы закрываете непосредственно stream. И переоткрыть его не получится. Соответственно у вас когда отработал метод getFloatValue() первый раз - вы закрываете stream и во время работы метода во второй раз уже не можете его открыть. И получаете исключение