0

我制作了一个类似于自动售货机的程序!

我的代码类似于:

public static void main (String [] args) {
    Scanner sc = new Scanner (System.in);
    while(sc.hasNext()) {
        String string = sc.next();

        sum = generateSum(sum)
        .....
    }
}

public static int generateSum(int sum) {
    Scanner sc = new Scanner (System.in);
    while (sc.hasNext()) {
        ....
    }

    return sum;
}

很抱歉简化了我的代码,但正常的代码很长!但是,问题是我使用while (sc.hasNext())了两次循环。基本上我想继续我的主要方法,直到用户的输入是TERMINATE,但是我的程序在运行一次后终止。

我想如果我拿出我的generateSum方法,那么我的主要方法中的循环工作正常,所以我想它必须与while (sc.hasNext())循环两次有关。

有什么想法可以解决这个问题吗?

4

3 回答 3

1

hasNext()方法将阻塞,直到您打开文件末尾标记,System.in因为它不知道是否有更多输入,直到它读取完整的缓冲区或到达文件末尾(您可以在 Windows 和 Control 上使用 Control-Z 发出信号-D 在 unix 上)。此时System.in位于 EOF 标记处,无法从您的代码中重新打开它。

如果您需要处理来自System.in您的多个数据流,您将不得不使用某种标记值(例如单词 END)来标记一个输入流的结束和另一个输入流的开始。

于 2013-10-07T15:48:37.180 回答
0

我很确定,如果您使用 sc.next() 扫描的输入,状态会发生变化并且 hasNext() 会相应地返回。问题可能就在那里。

于 2013-10-07T15:24:23.380 回答
0

hasNext()可以根据需要调用该方法。但是,如果您在内部循环中调用该next()方法,那么它可能会吃掉外部循环中的值。

所以内循环很可能在hasNext()为假之后中断,因此外循环也完成了。

于 2013-10-07T15:25:11.153 回答