Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从单独的初始化列表创建对象数组时遇到空指针异常消息_Java_Arrays_Object_Methods_Nullpointerexception - Fatal编程技术网

Java 从单独的初始化列表创建对象数组时遇到空指针异常消息

Java 从单独的初始化列表创建对象数组时遇到空指针异常消息,java,arrays,object,methods,nullpointerexception,Java,Arrays,Object,Methods,Nullpointerexception,我创建了三个必须在“students”数组中使用的初始值设定项数组,它应该是student对象的数组。每次运行时,都会出现一个空指针错误 class School { private Student[] students; private int size; public School (int s) {size = s;} public void addData() { String[] name = {"Tom", "Ann", "Bob"

我创建了三个必须在“students”数组中使用的初始值设定项数组,它应该是student对象的数组。每次运行时,都会出现一个空指针错误

class School
{
   private Student[] students;
   private int size;

   public School (int s)
   {size = s;}

   public void addData()
   {
      String[] name = {"Tom", "Ann", "Bob", "Jan", "Joe", "Sue", "Jay", "Meg", "Art", "Deb"};
      int[] age = {21, 34, 18, 45, 27, 19, 30, 38, 40, 35};
      double[] gpa = {1.685, 3.875, 2.5, 4.0, 2.975, 3.225, 3.65, 2.0, 3.999, 2.125};

      for(int i = 0; i < size; i++){
          students[i] = new Student(name[i], age[i], gpa[i]);
        }
   }  

   public String toString()
   {
       String s = "";
       for(int i = 0; i < size; i++){
           s = s + students[i].toString();
        }
        return s;
   }
}

 class Student
{
   private String name;
   private int age;
   private double gpa;

   public Student (String n, int a, double g)
   {
      name = n;
      age = a;
      gpa = g;
   }

   public String getName() { return name; }  
   public int getAge()     { return age; }  
   public double getGPA()  { return gpa; }

   public String toString()
   {
      String temp = name + "  " + age + "  " + gpa + "\n";
      return temp;
   }
}
班级学校
{
私立学生[]名学生;
私有整数大小;
公立学校(INTS)
{size=s;}
public void addData()
{
String[]name={“汤姆”、“安”、“鲍勃”、“简”、“乔”、“苏”、“杰”、“梅格”、“阿特”、“黛布”};
int[]年龄={21,34,18,45,27,19,30,38,40,35};
双[]平均成绩={1.685,3.875,2.5,4.0,2.975,3.225,3.65,2.0,3.999,2.125};
对于(int i=0;i

问题究竟从哪里开始,如何解决

学生数组未初始化。在java中,您需要声明数组,并使用大小对其进行初始化。 例如:

private Student[] students = new Student[5];

这里您还并没有初始化数组的大小,所以在运行时,students数组指的是null

通过这一行,您试图在尚未初始化的内存中分配

students[i] = new Student(name[i], age[i], gpa[i]);
所以首先要做下面的改变

private Student[] students = new Student[7];
初始化如下:

private Student[] students = new Student[100]

理想情况下,student数组必须大于size,但size是在student数组之后定义的,因此我们不能这样做,必须使用足够大的随机数组长度。

array
students
从未初始化<代码>学生=新生[10]
在构造函数中,但如果传入的大小不是10,则也会出现问题。您可以在构造函数中初始化数组,这样您就知道大小了。Java中的数组不在编译时分配内存,而是在运行时分配内存。