我有一段代码用于扫描大量数字(作为整数)并将它们存储到场景对象中。但是,在我到达第 3499 个对象(它打印第 3498 个 J)后,它因空指针而崩溃。我寻找最大数组大小但在互联网上找不到任何东西,除了 2^32-5 但是我什至没有接近那个限制。
in1scan = new Scanner(in1);
in2scan = new Scanner(in2);
scenario[] ret= new scenario[9999];
int j=0;
while (in1scan.hasNext()){
String[] input=(in1scan.next().split(",", 16));
ret[j]=new scenario();
for (int i=0; i<16;i++){
ret[j].input[i]=Integer.parseInt((input[i]));
}
j++;
}
j=0;
while (in2scan.hasNext()){
ret[j].correct=Integer.parseInt(in2scan.next()); //here things go wrong
j++;
System.out.println(j);
}
有人知道怎么回事吗?是的,我知道我可以使用 nextInt 而不是当前接受数字的迂回方式,但我将添加一些需要以这种方式处理的额外功能。
最佳答案
你已经“用完”了 ret。
在这部分代码中,您创建了 ret
in1scan.size()
元素
while (in1scan.hasNext()){
String[] input=(in1scan.next().split(",", 16));
for (int i=0; i<16;i++){
ret[j]=new scenario();
ret[j].input[i]=Integer.parseInt((input[i]));
}
j++;
}
这里您使用 ret
的第一个 in2scan.size()
元素。如果 in2scan.size() > in1scan.size()
则 ret[j]
将为空,因此无法调用 .correct
j=0;
while (in2scan.hasNext()){
ret[j].correct=Integer.parseInt(in2scan.next()); //here things go wrong
j++;
System.out.println(j);
}
在调试器中逐步执行将(希望)确认这一点
关于3499个元素后的Java数组空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875508/