我写了一个示例代码:
import java.util.Scanner;
public class abcd {
public static void main(String[] args) {
System.out.print("please enter a: ");
Scanner a = new Scanner(System.in);
String b = a.next();
System.out.println(b);
}
}
我可以通过Ubuntu终端编译和执行此代码。在SciTe中,它编译得很好,但是当我运行它时,我遇到了这个错误:
please enter a: Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at abcd.main(abcd.java:8)
任何建议?
编辑:当我在终端执行文件时,我会这样做:'java abcd'Scite:'java -cp .abcd'。这两个命令有何不同,为什么java -cp不工作?
答案 0 :(得分:1)
在Linux / Unix上的SciTE处理标准输入似乎存在错误/不正确的实现。
该PDF文档中提供了错误的描述和解决方法:A Problem with SciTE Go Command on Linux
注意:这不是官方文档,但似乎与您的问题相符。
根据该文档,当通过" Go"运行Java程序时在SciTE上的命令,输入应该来自输出窗格。但是,在Linux上,这不能正常工作,就好像你是从空流中读取一样。
当您从空流中读取时,Scanner
会在尝试使用next()
,nextInt()
等读取值时看到文件结束标记。然后它会抛出一个NoSuchElementException
因为流中没有输入元素。
您可以选择解决此问题:
答案 1 :(得分:0)
尝试在next();
之前使用hasNext()import java.util.Scanner;
public class abcd {
public static void main(String[] args) {
System.out.print("please enter a: ");
Scanner a = new Scanner(System.in);
while(a.hasNext()) {
try {
String b = a.next();
System.out.println(b);
} catch (NoSuchElementException e) {}
}
}
}
答案 2 :(得分:0)
我不是故意冒犯,但如Alexander's answer中建议的那样使用hasNext()将无法解决此问题,它只会使OP能够很好地处理它。我认为这不是他/她正在寻找的东西。
现在我无论如何都不是专家,并且出于某种原因你的程序代码在我的机器上工作......但是当程序在可迭代对象上循环时,会抛出 NoSuchElementException 尽管你的计划期待那里的东西,但没有什么比这更好的了。快速查看Scanner.next()的Java文档 显示如果没有可用于读取的标记,则抛出此异常。
现在,如果我不得不猜测我会建议您尝试使用Scanner.next()
之外的其他内容,看看是否有效。
它在我的机器上工作但不在你的机器上工作这一事实有点令人惊讶,那么你能提供一些关于你如何尝试运行程序的信息吗?您是否从默认命令行运行它?或者在Scite中? (如果是第二种情况,我真的无法帮助你,我从未触及过Scite)。