扫描仪不要求输入,抛出 No Such Element Exception - 多个扫描仪
Scanner not asking for input , throws No Such Element Exception - multiple scanners
在下面的代码中,我使用了两个扫描器,一个在 performAction() 方法中,一个在 getTicketNumber() 方法中。我已经尝试使用资源,一旦我进入 getTicketNumber() 方法,它工作正常,一旦控件 returns 返回并进入 performAction() 我在执行 [= 时得到 No Such Element Exception 13=]() 行。我想继续这个过程,直到我按下退出。我想这是由于使用了多个扫描仪,因为如果我不使用 getTicketNumber() 方法,它就可以正常工作。有什么想法吗?
private void performAction() {
int choice = 4;
System.out.println("Hi User");
System.out.println("What do you want to do ");
try (Scanner scanner = new Scanner(System.in)) {
do {
System.out.println("1. Book ticket");
System.out.println("2. Cancel ticket");
System.out.println("3. Check status");
System.out.println("4. Exit");
System.out.println("Enter your choice");
choice = scanner.nextInt();
System.out.println();
doActionBasedOnChoice(choice);
System.out.println();
} while (choice != 4);
} catch (InputMismatchException e) {
System.out.println("Please enter a valid choice");
}
}
private void doActionBasedOnChoice(int choice) {
switch (choice) {
case 1:
ticketReservation.bookFlight();
break;
case 2:
System.out.println("Please enter your ticket number ");
int ticketNumber = getTicketNumber();
ticketReservation.cancel(ticketNumber);
break;
case 3:
ticketReservation.checkConfirmedListStatus();
break;
case 4:
System.out.println("Thank you ");
break;
default:
break;
}
}
private int getTicketNumber() {
try (Scanner scanner = new Scanner(System.in)) {
int choice = scanner.nextInt();
return choice;
} catch (InputMismatchException e) {
System.out.println("Please enter a valid ticekt number");
}
return 0;
}
我发现当你对资源使用 try 时它会自动关闭资源,并且一旦 System.in
关闭就无法重新打开。
所以建议是使用一个扫描仪对象并通过参数将其传递给不同的方法
当 "inner" 扫描程序超出范围时,它由 try 块处理,进而关闭 System.in 流。
通过将扫描仪传递给任何需要它的人来解决,或者将它移动到更高的范围。
在下面的代码中,我使用了两个扫描器,一个在 performAction() 方法中,一个在 getTicketNumber() 方法中。我已经尝试使用资源,一旦我进入 getTicketNumber() 方法,它工作正常,一旦控件 returns 返回并进入 performAction() 我在执行 [= 时得到 No Such Element Exception 13=]() 行。我想继续这个过程,直到我按下退出。我想这是由于使用了多个扫描仪,因为如果我不使用 getTicketNumber() 方法,它就可以正常工作。有什么想法吗?
private void performAction() {
int choice = 4;
System.out.println("Hi User");
System.out.println("What do you want to do ");
try (Scanner scanner = new Scanner(System.in)) {
do {
System.out.println("1. Book ticket");
System.out.println("2. Cancel ticket");
System.out.println("3. Check status");
System.out.println("4. Exit");
System.out.println("Enter your choice");
choice = scanner.nextInt();
System.out.println();
doActionBasedOnChoice(choice);
System.out.println();
} while (choice != 4);
} catch (InputMismatchException e) {
System.out.println("Please enter a valid choice");
}
}
private void doActionBasedOnChoice(int choice) {
switch (choice) {
case 1:
ticketReservation.bookFlight();
break;
case 2:
System.out.println("Please enter your ticket number ");
int ticketNumber = getTicketNumber();
ticketReservation.cancel(ticketNumber);
break;
case 3:
ticketReservation.checkConfirmedListStatus();
break;
case 4:
System.out.println("Thank you ");
break;
default:
break;
}
}
private int getTicketNumber() {
try (Scanner scanner = new Scanner(System.in)) {
int choice = scanner.nextInt();
return choice;
} catch (InputMismatchException e) {
System.out.println("Please enter a valid ticekt number");
}
return 0;
}
我发现当你对资源使用 try 时它会自动关闭资源,并且一旦 System.in
关闭就无法重新打开。
所以建议是使用一个扫描仪对象并通过参数将其传递给不同的方法
当 "inner" 扫描程序超出范围时,它由 try 块处理,进而关闭 System.in 流。
通过将扫描仪传递给任何需要它的人来解决,或者将它移动到更高的范围。