我编写了一个示例代码:
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‘Scite做:'java -cp .abcd’。这两个命令有什么不同,为什么java -cp不能工作?
发布于 2016-02-20 11:58:04
在Linux/Unix上处理SciTE中的标准输入时,似乎存在错误/不正确的实现。
错误和解决方法的描述在这个PDF文档中:Linux命令的一个问题。
注意:这不是正式文档,但它似乎符合您的问题。
根据该文档,当通过SciTE上的"Go“命令运行Java程序时,输入应该来自输出窗格。但是,在Linux上,这是不能正常工作的,就像在从空流中读取一样。
当您从空流读取时,当Scanner尝试使用next()、nextInt()等读取值时,它会看到文件结束标记,并且当流中没有输入元素时,它会抛出一个NoSuchElementException。
您可以选择如何解决这个问题:
发布于 2016-02-20 10:59:13
尝试在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) {}
}
}
}发布于 2016-02-20 11:06:07
我无意冒犯,但是使用hasNext()并不能解决这个问题,它只会使OP能够很好地处理它。我不认为这是他/她想要的。
现在我无论如何都不是专家,因为某种原因,你的程序代码在我的机器上工作.但是无论如何,当您的程序在可迭代对象上循环时,抛出一个NoSuchElementException,并且没有什么可循环的东西了,尽管您的程序希望在那里看到一些东西。在Scanner.next()的Java中快速查找显示,如果没有更多可用于读取的标记,则会抛出此异常。
现在,如果我不得不猜测,我建议您尝试使用Scanner.next()以外的其他东西,看看它是否有效。
它在我的机器上工作,但在你的机器上不工作,这有点令人惊讶,所以你能提供一些关于你如何运行你的程序的信息吗?您是从默认命令行运行它吗?还是在监狱里?(如果第二种情况是这样的话,我真的帮不了你,我甚至从来没有碰过Scite)。
https://stackoverflow.com/questions/35521737
复制相似问题