package gteqiandui;
import java.util.*;
public class GTeQianDui {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int soldier_sum = input.nextInt();
soldier[] sol = new soldier[soldier_sum];
sol[0].name = 1;
for (int i = 1; i < soldier_sum; i++) {
sol[i].name = i + 1;
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
}
}
package gteqiandui;
public class soldier {
int high ;
int name ;
int low ;
}
为什么运行总报空指针异常,请大家帮忙看看
Exception in thread "main" java.lang.NullPointerException
at gteqiandui.GTeQianDui.main(GTeQianDui.java:18)
Java Result: 1
6 个解决方案
#1
#2
你这个 应该在第十二行就有异常
对象数组默认初始化为null
对象数组默认初始化为null
#3
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入:");
int soldier_sum = input.nextInt();
Soldier[] sol = new Soldier[soldier_sum];
sol[0] = new Soldier();//要构建对象要不然会空指针
sol[0].high =1;
for (int i = 1; i < soldier_sum; i++) {
sol[i] = new Soldier();
sol[i].name = i + 1;
System.out.println("请输入:");
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
}
Scanner input = new Scanner(System.in);
System.out.println("请输入:");
int soldier_sum = input.nextInt();
Soldier[] sol = new Soldier[soldier_sum];
sol[0] = new Soldier();//要构建对象要不然会空指针
sol[0].high =1;
for (int i = 1; i < soldier_sum; i++) {
sol[i] = new Soldier();
sol[i].name = i + 1;
System.out.println("请输入:");
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
}
#4
你好 可以详细解释一下吗???麻烦你了 为什么不创建一个对象就会是空指针?
#5
针对你写的那段代码有3个问题,你自己没弄明白:
1、soldier[] sol = new soldier[soldier_sum];
你这一行只是声明了一个soldier的数组,但是后续没见到任何给数组元素复制的代码
2、soldier[] sol = new soldier[soldier_sum];
sol[0].name = 1;
这个与第一个问题一样,数组的第0个元素,你没有赋任何对象,然后调用第0个元素的name属性,这绝对会空指针
3、for (int i = 1; i < soldier_sum; i++) {
sol[i].name = i + 1;
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
第一个for循环与第二个for循环的开始不一样,第0个元素的high未处理。
1、soldier[] sol = new soldier[soldier_sum];
你这一行只是声明了一个soldier的数组,但是后续没见到任何给数组元素复制的代码
2、soldier[] sol = new soldier[soldier_sum];
sol[0].name = 1;
这个与第一个问题一样,数组的第0个元素,你没有赋任何对象,然后调用第0个元素的name属性,这绝对会空指针
3、for (int i = 1; i < soldier_sum; i++) {
sol[i].name = i + 1;
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
第一个for循环与第二个for循环的开始不一样,第0个元素的high未处理。
#6
对的 第12行开始就出错了,就是因为没构建对象嘛
#1
#2
你这个 应该在第十二行就有异常
对象数组默认初始化为null
对象数组默认初始化为null
#3
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入:");
int soldier_sum = input.nextInt();
Soldier[] sol = new Soldier[soldier_sum];
sol[0] = new Soldier();//要构建对象要不然会空指针
sol[0].high =1;
for (int i = 1; i < soldier_sum; i++) {
sol[i] = new Soldier();
sol[i].name = i + 1;
System.out.println("请输入:");
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
}
Scanner input = new Scanner(System.in);
System.out.println("请输入:");
int soldier_sum = input.nextInt();
Soldier[] sol = new Soldier[soldier_sum];
sol[0] = new Soldier();//要构建对象要不然会空指针
sol[0].high =1;
for (int i = 1; i < soldier_sum; i++) {
sol[i] = new Soldier();
sol[i].name = i + 1;
System.out.println("请输入:");
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
}
#4
你好 可以详细解释一下吗???麻烦你了 为什么不创建一个对象就会是空指针?
#5
针对你写的那段代码有3个问题,你自己没弄明白:
1、soldier[] sol = new soldier[soldier_sum];
你这一行只是声明了一个soldier的数组,但是后续没见到任何给数组元素复制的代码
2、soldier[] sol = new soldier[soldier_sum];
sol[0].name = 1;
这个与第一个问题一样,数组的第0个元素,你没有赋任何对象,然后调用第0个元素的name属性,这绝对会空指针
3、for (int i = 1; i < soldier_sum; i++) {
sol[i].name = i + 1;
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
第一个for循环与第二个for循环的开始不一样,第0个元素的high未处理。
1、soldier[] sol = new soldier[soldier_sum];
你这一行只是声明了一个soldier的数组,但是后续没见到任何给数组元素复制的代码
2、soldier[] sol = new soldier[soldier_sum];
sol[0].name = 1;
这个与第一个问题一样,数组的第0个元素,你没有赋任何对象,然后调用第0个元素的name属性,这绝对会空指针
3、for (int i = 1; i < soldier_sum; i++) {
sol[i].name = i + 1;
sol[i].high = input.nextInt();
}
for (int i = 0; i < soldier_sum; i++) {
System.out.print(sol[i].high);
}
第一个for循环与第二个for循环的开始不一样,第0个元素的high未处理。
#6
对的 第12行开始就出错了,就是因为没构建对象嘛