2015-10-01 81 views
-3

我有一個名爲「信息」的字符串的ArrayList,每個字符串保存有關我的類Student的實例的信息。 我嘗試將Arraylist轉換爲數組,然後使用split方法解析它。如何在java中的循環中創建新對象?

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

解析每一行後,我嘗試在for循環中創建一個新對象並將其添加到Students ArrayList中。會發生什麼是每當我創建這個新對象Student時,之前添加到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); 
     } 

我試着在不同的點打印學生直到創建新的對象寄託都沒有大礙。 在任何時候,所有對象都具有與創建的最後一個對象相同的屬性值。

這是學生類的構造函數:

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; 
} 
+2

你能發佈更多的學生類的?我猜這些字段是靜態的...... – Steven

+0

帶有你的學生構造函數的文件將不能編譯,因爲'class'不能用作變量名。請不要使用大寫字母來啓動變量名稱。 –

+0

這不可能是您的真實代碼。你有一個叫做'class'的變量。 – khelwood

回答

0

靜態成員意味着該成員屬於類而不是對象,因此您的成員不斷變化。

我的猜測是你的成員都是靜態的,所以要儘量像這樣定義你的學生類:

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; 
    } 
} 
+0

這正是我的問題。非常感謝您的幫助! – Squimae219

2

走字static出你Student類。

static的意思是「所有學生的其中之一」。但每個學生都應該有不同的年齡,身份證等,所以這些領域(和相關方法)不應該是靜態的。

+0

感謝您的幫助!我不知道那個...... :) – Squimae219

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); 
} 
+0

非常感謝你!這幫了很多... – Squimae219