Вот фрагмент моего кода:
Код: Выделить всё
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