2014-10-30 89 views
0

我正在開發一個項目(昨天我遇到了問題,很多人幫助了我!),所以我決定再次尋求幫助。Java - 在對象中使用對象

我的代碼有3個類。 ProjectMain,學生,課堂。我創建了一個Classroom對象數組。現在我有3個Classroom對象。但我必須將學生對象分配給這些Classroom對象。例如:classarray [0]是來自Classroom類和studentobject.get(0)的一個對象,studentobject.get(1)...將成爲classarray [0]對象內的學生對象。但在編碼時我沒有做到這一點。這裏是我的課:

public class Classroom 
{ 

    private String classname; 
    private String word[] = null; 
    protected ArrayList<Students> studentobject = new ArrayList<Students>(10); 

    public String[] getWord() 
    { 
     return word; 
    } 

    public void setWord(String[] word) 
    { 
     this.word = word; 
    } 

    public ArrayList<Students> getStudentobject() 
    { 
     return studentobject; 
    } 

    public void setStudentobject(ArrayList<Students> studentobject) 
    { 
     this.studentobject = studentobject; 
    } 

    public String getClassname() 
    { 
     return classname; 
    } 

    public void setClassname(String classname) 
    { 
     this.classname = classname; 
    } 

    public void classroomreader(String filename) 
    { 
     // This method gets the name of Classroom 
     File text = new File("C:/Users/Lab/Desktop/classlists/" + filename 
       + ".txt"); 
     Scanner scan; 
     try 
     { 

      scan = new Scanner(text); 
      String line = scan.nextLine(); 
      word = line.split("\t"); 
      line = scan.nextLine(); 
      word = line.split("\t"); 

     } catch (FileNotFoundException e1) 
     { 
      e1.printStackTrace(); 
     } 

    } 

} 

這是我的學生類:

public class Students extends Classroom 
{ 

    private String name,id; 
    private int age; 




    public String getName() 
    { 
     return name; 
    } 
    public void setName(String name) 
    { 
     this.name = name; 
    } 
    public String getId() 
    { 
     return id; 
    } 
    public void setId(String id) 
    { 
     this.id = id; 
    } 
    public int getAge() 
    { 
     return age; 
    } 
    public void setAge(int age) 
    { 
     this.age = age; 
    } 

我的主類:

public class ProjectMain 
{ 

    public static void main(String[] args) 
    { 

     Classroom[] classarray = new Classroom[3]; 


     //I got 3 Classroom objects here 
     classarray[0]=new Classroom(); 
     classarray[1]=new Classroom(); 
     classarray[2]=new Classroom(); 

     classarray[0].classroomreader("class1"); 

     classarray[0].studentobject.get(0).setName(classarray[0].getWord()[1]); 
//The problem is in here. When my code comes to the line above, 
// at java.util.ArrayList.rangeCheck(Unknown Source) error comes out. 
// I tried to get first object in studentobject Arraylist, and tried to set it's name 
// to the variable which my text reader reads. 

我怎麼能寫什麼我在我的腦海?

+0

studentobject.get()不引用任何東西。你有一個叫做getstudentobject()的方法 – 2014-10-30 21:37:56

+2

你有'學生擴展課堂' - 我不認爲「學生」是一種「課堂」。 – khelwood 2014-10-30 21:40:46

+1

我讀過'Is-a'(擴展)'Has-a'(引用)關係和繼承。它有助於大聲說出來。 「學生是教室」是否有意義?它不應該是「教室有一個學生」嗎? – 2014-10-30 21:42:59

回答

0

您的課堂閱讀器方法讀取文件,但沒有做太多的工作......也許您想在其中創建一些學生實例。

 scan = new Scanner(text); 
     String line = scan.nextLine(); 
     word = line.split("\t"); // won't be used 
     line = scan.nextLine(); 
     word = line.split("\t"); // erased here 

在那裏你只有字屬性中的文件的最後一行(拆分)。

0

創建Classroom實例時studentobject列表被創建爲空,並且它保持這種狀態,因此您無法訪問其中的第一個(或任何)對象。

來填充您的列表,你可以添加到Classroom方法是這樣的:

public void addStudent(Student s) 
{ 
    studentobject.add(s); 
} 
0

教室包含以下字段聲明

String word[] = null; 

主類,含該classroomreader不設置值這個領域。然而你要調用

classarray[0].getWord()[1] 

然後必須失敗。

提示:不要使用表達式這樣的,您也可以在主類(至少在開發或學習的早期階段)

classarray[0].studentobject.get(0).setName(classarray[0].getWord()[1]); 

解析爲變量和幾個步驟中找到。如果上下文不受干擾,編譯器足夠聰明以產生相同的代碼,即長表達式被分解爲單個塊。永遠不要忘記,編程語言的目的是爲了使程序對人類可讀。 :)具有縮寫或「技巧」的代碼僅僅顯示一些哲學態度(imho)