Сканер Java: NoSuchElementException при чтении ввода в методе после закрытия сканера в основномJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сканер Java: NoSuchElementException при чтении ввода в методе после закрытия сканера в основном

Сообщение Anonymous »

Я разрабатываю простой калькулятор на Java для своего учебного курса, но сталкиваюсь с исключением NoSuchElementException при попытке прочитать пользовательский ввод в методе после закрытия сканера в основном методе.
Вот фрагмент моего кода:

Код: Выделить всё

import java.util.Scanner;

public class Exercice7 {

public static double menu(double valeur1,double valeur2) {

int selection;
Scanner input = new Scanner(System.in);

/**
* ************************************************
*/
// Prompt pour permettre à l'utilisateur d'utiliser un opérateur
// String operateur[] = {"addition", "soustraction", "multiplication", "division"};
//Appel de fonctions
System.out.println("Quel opération voulez--vous effectuer ?");
System.out.println("-------------------------\n");
System.out.println("1 - Addition");
System.out.println("2 - Soustraction");
System.out.println("3 - Multiplication");
System.out.println("4 - Division");

selection = input.nextInt();
input.close(); // Fermeture du scanner

double resultat = 0; // Declaration de la variable résultat

// Switch pour sélectionner l'opération
switch (selection) {
case 1:
resultat = valeur1 + valeur2;
System.out.println(resultat);
break;
case 2:
resultat = valeur1 - valeur2;
System.out.println(resultat);
break;
case 3:
resultat = valeur1 * valeur2;
System.out.println(resultat);
break;
case 4:
resultat = valeur1 / valeur2;
System.out.println(resultat);
break;
default:
break;
}
return resultat;

}
// Opérateur de la calculatrice :
public static void main(String[] args) {

// Déclaration de scanner
Scanner scanner = new Scanner(System.in);
// saisie des valeurs
System.out.print("Entrez la première valeur :");
double value1 = scanner.nextDouble();

System.out.print("Entrez la deuxième valeur :");
double value2 = scanner.nextDouble();

//Fermeture  du scanner
scanner.close();

//Appel de la méthode menu
menu(value1, value2);
}

}

Проблема: при запуске программы я получаю следующее исключение:

Код: Выделить всё

Java> java .\Exercice7.java
Entrez la première valeur :15
Entrez la deuxième valeur :2
Quel opération voulez--vous effectuer ?
-------------------------

1 - Addition
2 - Soustraction
3 - Multiplication
4 - Division
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:945)
at java.base/java.util.Scanner.next(Scanner.java:1602)
at java.base/java.util.Scanner.nextInt(Scanner.java:2267)
at java.base/java.util.Scanner.nextInt(Scanner.java:2221)
at Exercice7.menu(Exercice7.java:24)
at Exercice7.main(Exercice7.java:69)
Вопросы:

Код: Выделить всё

Why is this exception occurring?
How can I resolve this issue without having to create multiple instances of Scanner?
Is there a way to use multiple scanner ?
Заранее благодарим за помощь!
Что я пробовал:
Я реализовал простой калькулятор в Java, который принимает от пользователя два значения, а затем просит его выбрать операцию (сложение, вычитание, умножение или деление). Я создал метод под названием «меню» для управления выбором операции. Прочитав вводимые пользователем данные в основном методе, я закрыл экземпляр Scanner.
Что я ожидал:
Я ожидал, что после закрытия Scanner в main, программа успешно вызовет метод меню и предложит пользователю выбрать операцию. Я предполагал, что программа выполнится без ошибок и вернет результат выбранной операции.
Что на самом деле получилось:
Вместо этого я столкнулся с исключением NoSuchElementException. когда программа попыталась прочитать ввод пользователя в методе меню. Это указывает на то, что сканер не может читать входной поток, поскольку он был закрыт в основном методе. Я ожидал плавного выполнения без исключений, но программа дает сбой на этапе ввода в методе меню.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ter-closin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»