用对象数组调用构造函数

时间:2019-02-17 08:55:35

标签: java

我需要创建一个对象数组,并从控制台读取构造函数中元素的值。我很困惑如何做。任何人都可以澄清一下如何做

public class Student {
    int id;
    String name;
    double marks;

    public Student(int id, String name, double marks) {
        id = this.id;
        name = this.name;
        marks = this.marks;
    }
}

public class Solution {
    public static void main(String[],args)
    {
      Scanner sc = new Scanner(System.in);
      int n=sc.nextInt();
      Student[] arr=new Student[n];
      for(int i=0;i<n;i++)
      {
         int x =sc.nextInt();
         String y=sc.nextLine();
         double z=sc.nextDouble();
         arr[i]=arr.Student(x,y,z);
      }
    }
}

我对如何调用构造函数感到困惑。 谁能帮我吗?

4 个答案:

答案 0 :(得分:1)

您可以执行以下两项操作之一:

1。通过调用构造函数创建一个临时对象,然后将该对象添加到数组中:

Student temp= new Student(x,y,z);
arr[i]=temp;

2。直接实例化一个新对象并将其添加到数组中,如下所示:

arr[i]=new Student(x,y,z);

这两种方法都可以正常工作,但是建议使用方法2,因为当您明确地可以实现目标时,不应该将内存分配给临时对象

答案 1 :(得分:1)

代替:

arr [i] = arr.Student(x,y,z);

要做:

arr [i] =新学生(x,y,z);

为什么?因为,数组中的每个对象都是Student类的一个实例

答案 2 :(得分:1)

您的构造函数被错误地声明。 this始终用于引用实例变量。将您的构造函数更改为此:

public class Student {
int id;
String name;
double marks;

public Student(int id, String name, double marks) {
    this.id = id;
    this.name = name;
    this.marks = marks;
} }

public class Solution {
    public static void main(String[],args)
    {
      Scanner sc = new Scanner(System.in);
      int n=sc.nextInt();
      Student[] arr=new Student[n];
      for(int i=0;i<n;i++)
      {
         int x =sc.nextInt();
         String y=sc.nextLine();
         double z=sc.nextDouble();
         arr[i]= new Student(x,y,z); //no need to create an object for arr
      }
    }
}

答案 3 :(得分:-1)

因为您的构造函数是错误的。

public class Student {
    int id;
    String name;
    double marks;

    public Student(int id, String name, double marks) {
        this.id = id;
        this.name = name;
        this.marks = marks;
   }
}