java 结构体数组的问题

时间:2022-08-30 18:29:57
     
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


该回复于2016-02-16 08:56:03被管理员删除

#2


你这个 应该在第十二行就有异常
对象数组默认初始化为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);
}
}

#4


引用 3 楼 zmbc48 的回复:
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);
}
}



你好 可以详细解释一下吗???麻烦你了  为什么不创建一个对象就会是空指针?

#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未处理。

#6


引用 2 楼 doublesix3 的回复:
你这个 应该在第十二行就有异常
对象数组默认初始化为null


对的 第12行开始就出错了,就是因为没构建对象嘛

#1


该回复于2016-02-16 08:56:03被管理员删除

#2


你这个 应该在第十二行就有异常
对象数组默认初始化为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);
}
}

#4


引用 3 楼 zmbc48 的回复:
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);
}
}



你好 可以详细解释一下吗???麻烦你了  为什么不创建一个对象就会是空指针?

#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未处理。

#6


引用 2 楼 doublesix3 的回复:
你这个 应该在第十二行就有异常
对象数组默认初始化为null


对的 第12行开始就出错了,就是因为没构建对象嘛