我在下面printf行的test.main(test.java :)中的线程“main”java.lang.NullPointerException中收到Java Exception。
我在stdin上输入值,例如1 2 Bus然后回车然后另一行,我在Windows上使用Ctrl-Z结束。
我已将打印语句放入,数据读取似乎正常。为什么我在这里得到null异常?
以下是代码:
import java.util.Scanner;
public class test {
public static class Data
{
public Data() {}
public Data(int v1, int v2, String s1) { n1 = v1; n2 = v2; s = s1; }
public int n1;
public int n2;
public String s;
};
public static void main(String[] args) {
int i = 0;
int v1, v2;
v1 = v2 = 0;
String s;
Data items[] = new Data[100];
Scanner input = new Scanner(System.in);
while(input.hasNext()) {
switch(i % 3) {
case 0: v1 = input.nextInt(); break;
case 1: v2 = input.nextInt(); break;
case 2:
s = input.next();
items[i] = new Data(v1, v2, s);
break;
}
++i;
}
input.close();
for(int j = 0; j < i; ++j) {
//on next line get Exception in thread "main" java.lang.NullPointerException at test.main(test.java:)
System.out.printf( "%s\t%d\t%d\n", items[j].s, items[j].n1, items[j].n2);
}
}
}
答案 0 :(得分:1)
一旦正确缩进,请查看代码:
switch(i % 3) {
case 0:
v1 = input.nextInt();
break;
case 1:
v2 = input.nextInt();
break;
case 2:
s = input.next();
items[i] = new Data(v1, v2, s);
break;
}
++i;
这意味着您只需items[i]
初始化i % 3 == 2
。因此,数组中三个元素中的2个为空。
但是在最后一个循环中,你试图打印每个元素,而不是测试null。
附注:命名字段s,n1和n2是拥有不可读,不可维护代码的最佳方式。给你的类和变量赋予有意义的名字。