我正在尝试解决一个竞争性编码问题,当我在eclipse或命令提示符下执行该代码时,它工作正常,但是当我将该解决方案上载到网站时,它没有执行,并在以下位置将noSuchElementException抛出:我首先接受了用户的输入。 我已经添加了导致问题的代码部分。
我尝试使用Java 8编译器版本在不同的在线编译器上执行它,但仍会引发相同的错误。 我也曾尝试使用BufferedReader,但由于某种原因,代码将k的值打印为-1。
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
if(!sc.hasNext()){
System.out.println("hasNext returns false");
}
int k=sc.nextInt();
System.out.println(k);
}
}
输出:
hasNext returns false
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Solution.main(Solution.java:9)
答案 0 :(得分:0)
这里您正在检查sc.hasNext(),它将显示“ hasNext返回false”,但是在此之后,您将再次获得nextInt(),因为在在线编译器中您无法在运行时传递参数
尝试一下
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
if(!sc.hasNext()){
System.out.println("hasNext returns false");
} else {
int k=sc.nextInt();
System.out.println(k);
}
}
答案 1 :(得分:0)
如果您使用的是一些在线编译器,我想您只是没有标准的输入流。只需像这样模拟您的输入即可:
Scanner sc = new Scanner("42");
尽管您检查hasNext()
返回的是false,但是您仍在尝试读取导致异常的下一个int。 java.util.Scanner.throwFor()
上方有一个代码注释,似乎可以证实这一点:
// If we are at the end of input then NoSuchElement;
// If there is still input left then InputMismatch
答案 2 :(得分:0)
也许您应该使用静态方法,例如:
nextInt();
nextLine();
nextDouble();
nextBoolean();