【发布时间】:2019-03-11 16:06:36
【问题描述】:
当我在 IntelliJ 上运行我的代码时,我没有收到错误消息。但是,当我尝试提交我正在处理的作业的代码时,我得到了两个测试用例的 NFE。我删除了我的所有代码,只让下面的代码在测试用例中运行。这里的某个地方一定是NumberFormatException。
public class Search {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
int[] list = new int[n];
String [] tokens = sc.nextLine().trim().split(" ");
for (int i=0; i<tokens.length;i++){
list[i]=Integer.parseInt(tokens[i]);
}
}
}
我阅读了有关双空格的信息并通过以下方式进行了检查:System.out.println(Arrays.asList(tokens).contains(""));
输出为假,所以这不是一个选项。如您所见,我已经在使用trim()。
我会很感激你的帮助。
路易斯
编辑: 好吧,这里有些可疑。我加了
System.out.println(Arrays.asList(tokens).contains(""));
System.out.println(Arrays.toString(tokens));
到我的代码并把它交给测试用例。虽然 IntelliJ 会传递 false 后跟整数数组,但测试用例输出: 真的 [] . 因此,你们都是对的,我只是错误地假设我的测试用例中的输入与我在作业中给出的示例输入相似。
编辑2:
好的! 我想到了。测试用例的输入与我的测试输入中的格式完全不同,看起来有点像这样:
10
8 8 9 12 110 111 117 186 298 321
2
8 13
我假设我包含的 sc.nextLine() 跳过了我需要制作列表的整数。 所以实际的问题不是多余的空格或任何东西,只是我通过使用 sc.nextLine() 超越了我想要的输入。 给出了我需要的提示的答案,即使我认为这不是有意的,来自 Andronicus。 无论如何都要感谢其他人。
【问题讨论】:
-
在解析之前尝试记录
tokens[i]。你会知道,是什么导致了 NFE。 -
是的,您的令牌中有一个非整数,这会导致 NFE。可能有某种测试用例正在针对您的代码运行,这些代码传入非数字。
-
使用这个
split("\\s+")而不是split(" ")。 -
这也是我想出的解释。但是请看一下输入的 Im:10 8 8 9 12 110 111 117 186 298 321 这是我输入的前两行。对我来说,这看起来没有任何非整数标记。我还尝试打印出我的令牌数组。结果如下所示:[8, 8, 9, 12, 110, 111, 117, 186, 298, 321] 也没有非整数成员
-
上述输入适用于您发布的代码。这意味着这不是整个代码(所以问题出在其他地方)或者这不是您传递的输入。
标签: java regex string numberformatexception parseint