簡體   English   中英

如何在Java中將對象保留在對象數組中

[英]How to retain an object in an array of objects in Java

我不確定如何問這個問題。 我必須編寫一個包含2個類的程序:一個存儲數據,另一個調用顯示數據。 數據是學生的姓名和他/她的4門課程的名稱。 但是我必須將此循環放置,以便用戶至少輸入3條記錄。 如果用戶未輸入學生的姓名(或姓名=空白),則退出循環並顯示輸入的信息。

例:

John Doe MATH 101 ENGL 101 READ 101 COMP 101
Jane Doe PHYS 101 CHEM 101 PSYC 101 ACCT 101
Mary Doe PHED 101 HIST 101 CALC 101 POLS 101

我想做的是讓每個學生記錄一個對象,並將這3個對象存儲在對象數組中,然后顯示它。

下面是我的代碼:

import java.util.Scanner;
public class UserInterface {
    public static void main(String[] args) {
    //Create a scanner
    Scanner input = new Scanner(System.in);

    //Create an object from Business class
    Business b = new Business();

    //Declare variables
    final int NUMBER_OF_COURSES = 4;
    String[] coursesName = new String[4];
    Business[] businessArray = new Business[3]; //Declare a array of objects

    for (int counter = 0; counter < businessArray.length; counter++) {

    //Prompt user to input name
    System.out.println("Enter student's name: ");
    b.setName(input.nextLine());

    for (int i = 0; i < NUMBER_OF_COURSES; i++) {
    System.out.println("Enter " + b.getName() + "'s course number " + (i + 1));
    coursesName[i] = input.nextLine();
    }//end of for(i)-loop

    b.setCourses(coursesName);

    businessArray[counter] = b;

    System.out.println(businessArray[counter]); //Here it display correctly for each round

    }//End of for(counter)-loop

    for (int pa = 0; pa < businessArray.length; pa++)
        System.out.println(businessArray[pa]);         //but here it displays 3 records of the last entry
                                                        //so my question is how do I retain each entry in its own object and 
                                                     //adds it to the array of objects? 
                                                     //I know that b gets overwrite by the last data entered because
                                                    //it is just a pointer to that object.  

    input.close();

    }//End of main method

}//End of class UserInterface


The other class:

public class Business {

    //Declare variables
    private String name;
    private String[] courses = new String[4];

    //Default Constructor
    public Business(){

    }

    //getter for student's name
    public String getName() {
        return name;
    }

    //setter for student's name
    public void setName(String name) {
        this.name = name;
    }

    //getter for courses' name
    public String[] getCourses() {
        return courses;
    }

    //setter for courses' name
    public void setCourses(String[] courses) {
        this.courses = courses;
    }

}//End of class Business

我知道我的代碼不好。 但是我需要為此業務類中的每個變量都具有getter和setter方法。

將您創建的Business對象移到for循環中:

for (int counter = 0; counter < businessArray.length; counter++) {
    Business b = new Business();
    // ...
}

現在,數組中的每個條目都指向同一個對象,因此您要重復覆蓋其中的值。 將創建的內容移入循環意味着對數組的每個插槽都有一個不同的對象。

String retainCourse(int pointer){
    return this.courses[pointer];
}

將此功能添加到您的業務類別。

您應該覆蓋該類的.toString()方法以獲得預期的結果。

在for循環中,更好的做法是獲取當前對象並將其設置為強制轉換為確切類的臨時變量! Business current = (Business) businesses[i];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM