首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中将对象保留在对象数组中

如何在Java中将对象保留在对象数组中
EN

Stack Overflow用户
提问于 2018-10-25 12:27:08
回答 2查看 229关注 0票数 0

我不知道该怎么问这个问题。我必须编写一个有两个类的程序:一个存储数据,一个调用显示数据。数据是学生的姓名和他/她的4门课程的名称。但我必须将其放在一个循环中,以便用户输入至少3条记录。如果用户没有输入学生的姓名(或name =空),则跳出循环并显示输入的信息。

示例:

代码语言:javascript
复制
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个对象存储在一个对象数组中,然后显示它。

下面是我的代码:

代码语言:javascript
复制
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

我知道我的代码不好。但是我需要为这个Business类中的每个变量设置getter和setter。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-25 12:36:38

将创建的Business对象移动到for循环中:

代码语言:javascript
复制
for (int counter = 0; counter < businessArray.length; counter++) {
    Business b = new Business();
    // ...
}

现在,数组中的每个条目都指向同一个对象,因此您会重复覆盖其中的值。将创建转移到循环中意味着您将为数组的每个插槽创建一个不同的对象。

票数 1
EN

Stack Overflow用户

发布于 2018-10-25 13:11:15

代码语言:javascript
复制
String retainCourse(int pointer){
    return this.courses[pointer];
}

将此函数添加到业务类中。

您应该重写该类的.toString()方法以获得预期的结果。

在for循环中,更好的做法是获取当前对象,并将其设置为强制转换为确切类的临时变量!Business current = (Business) businesses[i];

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52981362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档