【发布时间】:2014-11-20 17:28:23
【问题描述】:
对于大学作业,我需要能够从控制台读取多行内容,直到用户输入 Ctrl+Z。我没有问题,我的问题在于我无法从 System.in 中读取任何内容,因为它总是抛出 NoSuchElementException。
以下是我用于多行阅读的代码,由讲师提供,因此我不想更改。
System.out.println("To terminate input, type the correct end-of-file indicator ");
System.out.println("when you are prompted to enter input.");
System.out.println("On UNIX/Linux/Mac OS X type <ctrl> d");
System.out.println("On Windows type <ctrl> z");
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
//Processes input
addFileIntoDirectory(input.nextLine());
}
我知道这是由相当于 EOF 标记的 Ctrl+Z 引起的,但我不知道如何越过它。无论我读了多少次,无论我是否在控制台输入了更多内容,我都会立即返回另一个 NoSuchElementException。
我尝试为菜单设置一个单独的扫描仪,关闭上面的扫描仪并为菜单打开一个新的扫描仪,但都不起作用。
有没有办法刷新/清除 System.in 或重置它?
如果您想了解更多详情,请告诉我。由于是家庭作业,我对程序的其余部分保持模糊。
编辑 1: 作业说“系统提供如下文本选择菜单,并且 循环运行。”这意味着程序不会在 Ctrl+Z 时终止。
- 从用户输入添加文件
- 显示整个目录
- 显示目录大小
- 退出 请选择 [0-4]:
【问题讨论】:
-
文件结束是文件结束,句号。那个流已经结束了。这是一个前流。但是,我认为您可能误解了您的任务。你还没有写出它到底是什么。但我在想,如果你应该有一个菜单,然后是一系列输入,然后返回菜单 - 那么
eof应该作为 program 的结尾,而不是输入结束。 -
@RealSkeptic 这就是我想要的,但菜单有一个“退出”选项,所以我被引导相信情况并非如此。
-
尽管如此,在你的问题中写下作业的完整和准确的文本。如果我们不知道实际需求,有很多解释的可能性......
-
是全文吗?然后它什么也没说Ctrl-Z。也许你应该忽略它。或者你应该说出作业的全文是什么。我仍然认为你在误解它。