Java если еще с вложенным циклом
У меня возникли некоторые проблемы с моим назначением Java, и в настоящее время я застрял в вложенном операторе if else. Я на самом деле пытаюсь получить возраст ввода от пользователя и сохранить его как переменную. После выполнения кода я получаю ошибку при запуске Я делаю это правильно или есть какой-то другой способ запрограммировать это?
Сообщение об ошибке, которое я получил
Введите ваш выбор: 1 Вы выбрали № 1 Пожалуйста, введите ваш возраст ** Исключение в теме "главная" java.lang.IllegalStateException: сканер закрыт at java.util.Scanner.ensureOpen(неизвестный источник) at java.util.Scanner.next(Неизвестный источник) at java.util.Scanner.nextInt(Неизвестный источник) at java.util.Scanner.nextInt(Неизвестный источник) at Assignment.main(Assignment.java:48)**
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println(
"1. Add player" + "\n" +
"2.Display transaction" + "\n" +
"3.Begin the ride");
System.out.println("");
System.out.println("Enter your selection: ");
char selection = sc.findInLine(".").charAt(0);
sc.close();
switch(selection) {
case '1' :
System.out.println("You have selected No.1");
break;
case '2' :
System.out.println("You have selected No.2" );
break;
case '3' :
System.out.println("You have selected No.3" );
break;
default:
System.out.println("Please make a selection");
break;
}
if (selection=='1') {
int age=0;
System.out.print("Please enter your age");
age = sc.nextInt();
while (age<100) {
age+=age;
}
}
else if (selection=='2') {
System.out.println("Display daily transaction");
}
else if (selection=='3') {
System.out.println("Begin the ride");
}
else {
System.out.println("Please enter a valid input");
}
}
4 ответа
Вы можете уменьшить этот код до очень хорошей степени, я не удалил вложенные операторы if, что можно сделать, переместив все выполнение в операторы case.
Эта программа завершит работу, если введенная опция не является числом, это также можно улучшить, прочитав ее как строку и проверив, является ли она одной из допустимых опций (набор ключей карты).
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
public class SwitchCase {
public static Map<Integer, String> options = new LinkedHashMap<Integer, String>();
static {
options.put(1, "Add player");
options.put(2, "Display transaction");
options.put(3, "Begin the ride");
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
for (Integer option : options.keySet()) {
System.out.println(option + ". " + options.get(option));
}
System.out.println("Enter your selection: ");
int selection = sc.nextInt();
switch (selection) {
case 1:
case 2:
case 3:
System.out.println("You have selected No." + selection);
break;
default:
System.out.println("Please make a selection");
break;
}
if (selection == 1) {
int age = 0;
System.out.print("Please enter your age : ");
age = sc.nextInt();
while (age < 100) {
age += age;
}
System.out.println(age);
} else if (selection == 2) {
System.out.println(options.get(selection));
} else if (selection == 3) {
System.out.println(options.get(selection));
} else {
System.out.println("Please enter a valid input!");
}
}
}
Пожалуйста, прочтите основную Java, чтобы вы могли лучше изучать программы.
Исключение довольно ясно по проблеме: java.lang.IllegalStateException: Scanner closed
Прежде чем ваш код вводит switch
закрываешь сканер с sc.close();
, Но позже вы пытаетесь прочитать это снова:
if (selection=='1') {
int age=0;
System.out.print("Please enter your age");
age = sc.nextInt(); // <---- Here
while (age<100) {
age+=age;
}
}
Но это не удастся, если сканер уже закрыт. Чтобы решить эту проблему, вы можете просто поставить строку sc.close()
до конца вашего main
,
В качестве альтернативы вы можете поместить все в блок try-with-resources, чтобы вам больше не приходилось закрывать сканер, потому что он будет закрыт автоматически после выхода из блока.
Регистр переключателя - это тип вложенности, если else. мы можем использовать switch вместо вложенной, если else. Вам не нужно использовать регистр switch и одновременно вложенную if else. Вы можете написать свой код, как это.
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("1. Add player" + "\n" +
"2.Display transaction" + "\n" +
"3.Begin the ride");
System.out.println("");
System.out.println("Enter your selection: ");
char selection = sc.findInLine(".").charAt(0);
switch(selection) {
case '1' :
System.out.println("You have selected No.1");
int age=0;
System.out.print("Please enter your age");
age = sc.nextInt();
while (age<100) {
age+=age;
}
System.out.print(age);
break;
case '2' :
System.out.println("You have selected No.2" );
System.out.println("Display daily transaction");
break;
case '3' :
System.out.println("You have selected No.3" );
System.out.println("Begin the ride");
break;
default:
System.out.println("Please make a selection");
System.out.println("Please enter a valid input");
break;
}
sc.close();
}