1

它在 do-while 循环内的第三行崩溃,并且不等待我的输入:

 input = kb.nextInt();

堆栈跟踪:

线程“主”java.util.NoSuchElementException 中的异常

在 java.util.Scanner.throwFor(未知来源)

在 java.util.Scanner.next(未知来源)

在 java.util.Scanner.nextInt(未知来源)

在 java.util.Scanner.nextInt(未知来源)

在 main.MainDriver.main(MainDriver.java:50)

相关代码:

do
    {
        displayFullMenu();
        System.out.print("Selection: ");
        input = kb.nextInt();
        
        switch (input)
        {
        //Create new survey
        case 1:     currentSurvey = new Survey();
                    break;
        
        //Display current survey            
        case 2:     currentSurvey.display();
                    break;
        
        //Save current survey           
        case 3:     saveSurvey(currentSurvey);
                    break;
                    
        //Load a survey
        case 4:     currentSurvey = loadSurvey();
                    break;
        
        //Modify a survey
        case 5:     currentSurvey.modify();
                    break;
                    
        /*******************Test Functions*******************/
                    
        //Create new test
        case 6:     currentSurvey = new Test();
                    break;
        
        //Display current test
        case 7:     currentSurvey.display();
                    break;
        
        //Save current test
        case 8:     saveSurvey(currentSurvey);
                    break;
                    
        //Load a test
        case 9:     currentSurvey = loadTest();
                    break;
                    
        //Modify a test
        case 10:    currentSurvey.modify();
                    
        default:    System.out.println("Invalid choice. Please make a valid choice: ");
                    input = kb.nextInt();
                    System.out.println();
        }
    } while (input != 99);
    kb.close();

在我选择选项 9 后它崩溃了。它正确保存了文件,然后返回到循环的顶部,并在前面提到的行处崩溃。我希望它要求更多的输入。

是什么赋予了?

4

2 回答 2

3

当我选择选项 8 时saveSurvey(),它必须创建一个新的 Scanner(在该方法中),因为所有这些都在我的 main 方法中。这可能是问题吗?

是的,这可能是问题所在。如果它与dScanner具有相同的源(System.in?) ,则关闭底层流,并且无法再获取输入。kbclose()kb

于 2012-11-04T22:58:34.920 回答
1

我想到了。

整个问题是由于我没有在 main 中创建静态扫描仪引起的 - 当我在 main 之外的其他方法中需要它时,我创建了新的。

代替

public class MainDriver
{
    public static Scanner kb = new Scanner(System.in);
    public void main(String[] args) throws IOException 
   {

我有:

public class MainDriver
{
    public static void main(String[] args) throws IOException 
    {
        public static Scanner kb = new Scanner(System.in);

然后用其他方法创建新的扫描仪。在这些方法结束时,我关闭了扫描仪。我猜它正在关闭本地扫描仪,因为当我摆脱close()了其他方法中的所有语句时,问题就消失了。

于 2012-11-04T23:04:37.913 回答