调用方法后出现NoSuchElement异常

时间:2018-11-03 15:45:39

标签: java debugging methods void

对于一个类,我必须创建一个程序,该程序具有一个菜单,用户可以根据自己的选择从菜单中选择运行特定方法的菜单。我遇到的问题是调用方法后,程序在第30行引发NoSuchElement异常(当我将下面的代码粘贴到26时,它在应该允许的那一行显示selection = console.nextInt())用户再次从菜单中选择一个选项。知道为什么有人会发生这种情况吗?

import java.util.*;
public class PartB {

public static void main(String[] args) {
    Scanner console = new Scanner(System.in);
    String pinNum;
    int selection = 0;
    boolean pin;

    System.out.print("Enter pin: ");

    pinNum = console.next();

    pin = check_pin(pinNum);

    if (pin == false) {
        System.out.print("Thank you for using the menu system. Goodbye");
    }


        while (selection != 4 && pin==true) {

        System.out.printf("%nPlease select a number from the menu below %n1: Wage "
            + "Calculator 2: Tip Calculator 3: Grocery Discount 4: Exit %n");

        selection = console.nextInt();

        if (selection == 1) {
            calc_wages();
        } else if (selection == 2) {
            calc_tip();
        } else if (selection == 3) {
            System.out.print("We haven't gotten this far yet");
        } else if (selection == 4){
            System.out.print("Thank you for using the program.");
            break;
        } else {
            System.out.print("There is no option for what you entered. Try again");
        }
            selection = 0;
        }

    console.close();
}//main

2 个答案:

答案 0 :(得分:1)

if(console.hasNextInt()){
  selection = console.nextInt();
}

hasNextInt()将确保在使用nextInt()读取流之前,要从流中读取一个in整数。否则,如果流已经耗尽,则可能会收到NoSuchElementException。

答案 1 :(得分:0)

@StefanR是正确的,因为导致问题的原因是我的扫描仪关闭。将扫描仪移至类字段会引发错误,但只需从我的方法中删除console.close()即可解决此问题。