如何在java中的循环中创建新对象?

时间:2015-10-01 09:09:47

标签: java loops object

我有一个String的ArrayList,名为" info"每个字符串包含有关我的班级学生实例的信息。 我尝试将Arraylist转换为数组,然后使用split方法解析它。

String[] Stringinfo = new String[info.size()];
Stringinfo = info.toArray(Stringinfo);

在我解析每一行后,我尝试在for循环中创建一个新对象并将其添加到Students ArrayList。会发生的是每次我创建这个新对象时,之前添加到Students ArrayList的其他对象都会更改为这个新对象。

String[] temp;
        for(int i = 1; i < LineCount + 1 ; i++)
        {
            temp = Stringinfo[i].split(" ");
            Student s = new Student(Integer.parseInt(temp[0]), Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), Integer.parseInt(temp[4]));
            Students.add(s);
        }

我尝试在不同的点上打印学生,并且在创建新对象之前一切正常。 在任何时候,所有对象都具有与最后创建的对象相同的属性值。

这是Student类构造函数:

public Student(int certif, int class_id, int ave, int i, int a)
{
    certification_num = certif;
    class_id = class;
    average_point = ave;
    student_id = i;
    age = a;
}

我搜索了很多,但无法找到答案。很抱歉,如果答案很明显,我是Java的新手。 任何帮助,将不胜感激。 提前谢谢。

编辑:

public class Student{

    public Student(){}
     public Student(int certif, int class, int ave, int i, int a)
    {
        certification_num = certif;
        class_id = class;
        average_point = ave;
        student_id = i;
        age = a;
    }


    public static int get_certification_num(){
        return certification_num;
    }

    public static int get_class_id(){
        return class_id;
    }

    public static int get_average_point(){
        return average_point;
    }

    public static int get_id(){
        return student_id;
    }

    public static int get_age(){
        return age;
    }

    private static int certification_num;
    private static int class_id;
    private static int age;
    private static int node_id;
    private static int student_id;
}

3 个答案:

答案 0 :(得分:2)

static课程中取出Student一词。

static表示“所有学生中的一个”。但是每个学生都应该有不同的年龄,身份等等,所以这些领域(以及相关的方法)不应该是静态的。

答案 1 :(得分:0)

静态成员意味着该成员属于该类而不属于该对象,因此您的成员不断变化。

我的猜测是你的成员是静态的,所以尝试像这样定义你的Student类:

public class Student {

    private int certification_num;
    private int class_id;
    private int average_point;
    private int student_id;
    private int age;
    public Student(int certif, int clazz, int ave, int i, int a)
    {
        this.certification_num = certif;
        this.class_id = clazz;
        this.average_point = ave;
        this.student_id = i;
        this.age = a;
    }
}

答案 2 :(得分:0)

首先,我建议你改变你的学生课程如下:

public class Student
{
  private int certification_num;
  private int class_id;
  private int average_point;
  private int student_id;
  private int age;

  public int getCertification_num() {
    return this.certification_num;
  }
  // Do this for all variables

  public void setCertification_num(int certif) {
    this.certification_num = certif;
  }
  // Do this for all variables
}

之后,您可以轻松使用您的学生课程。在其他情况下,当您没有或不需要所有信息时。

填充你的数组:

ArrayList<Student> students = new ArrayList<Student>();
for(int i = 1; i < LineCount + 1 ; i++)
{
  String[] temp;
  temp = Stringinfo[i].split(" ");
  Student s = new Student();
  s.setCertification_num(Integer.parseInt(temp[0]);
  //Do for all other fields

  Students.add(s);
}