我需要一些设计数组的帮助

时间:2012-03-28 17:31:16

标签: java arrays multidimensional-array

对于我的作业,我们的任务是创建:

Person类包含变量firstName, lastName, streetAddress, zipCodephone

CollegeEmployee扩展Person并添加ssn, salary,deptName

Faculty通过添加布尔值CollegeEmployee来扩展tenure

最后但并非最不重要的是,Student通过添加personGPA来扩展major

一切看起来都很好显示在屏幕上,我正在进行下一部分工作,即在一个阵列中创建14条记录(7名学生,4名员工和3名教员)。

3个不同的类,有多种数据类型,我不能为我的生活弄清楚如何用这个填充数组。这是我创建的第一个不是完全整数的数组。 Java教程没有给我任何东西,虽然Java: Generic Static Multidimensional Arrays有一些很好的信息,但它比我现在可以包围的还要多一点。

我最初想过为10个对象创建array[14][10] - 十四个变量 - 但我不能混合数据类型。那就是我迷路的地方。

任何人都有关于如何设计这个数组的建议,并且能够在之后显示它的值?

任何提示和建议都将不胜感激!

感谢。

7 个答案:

答案 0 :(得分:3)

据我了解,不需要对多维数组感兴趣。

1)创建一个采用Person个实例的数组。

Person [] myPeeps = new Person[14];

2)在print上创建一个Person方法,该子类覆盖以打印相关信息。

因为您的数组需要Person个实例,所以您可以放置​​Person的任何子类的实例,因为子类与它们的超类之间始终具有 is-a 关系。

因为Person有一个print方法,所以你可以在从数组中提取的任何内容上调用print。子类提供了自己的实现,因此可以打印相关数据。这样,您并不真正关心任何特定实例的子类;在运行时调用实例的正确print实现。

答案 1 :(得分:2)

您不需要多维数组。您可以创建一个Person对象数组。

Person[] people = new Person[14];
people[0] = new Student();
people[1] = new Employee();
.
.
.

答案 2 :(得分:1)

开始:

Person [] myArray = new Person [14];

答案 3 :(得分:1)

这就是为什么面向对象编程如此精彩的原因。如果您注意到,所有FacultyCollegeEmployeeStudent都是Person类型的子集。因此,如果将它们声明为类型Person,则可以将它们全部包含在同一数据集中。

Person[] array = new Person[14];

您可以将所有对象添加到该数组中;但要小心。当您使用数组Java的元素时,现在只知道每个元素都有Person所做的方法 - 因此您只能使用firstNamelastName,{{除非您在检索对象后再投射对象,否则请从这些元素中添加1}},streetAddresszipCode

答案 4 :(得分:1)

由于它们都是Person类型,为什么不使用Person数组?

Person [] people = new Person[14];

您可以安全地将所有类型的Person添加到此数组中,但是您只能将它们视为Person(不进行强制转换)。让每个子类输出自定义详细信息,并在Person

中添加此方法
class Person {
    void print() {
        // default Person printing
    }
}

并在每个子类中重写此方法以打印其成员变量:

class Student extends Person {
    void print() { // <-- note same method signature!
       // print "I'm a Student", GPA, major
    }        
}

并填充数组时:

for (Person p : people) {
    p.print(); // delegates to print method associated with the underlying type
}

答案 5 :(得分:1)

您也可以像Person[]数组一样创建int[]数组。 e.g。

Person[] people = new Person[14]

然后您可以将人员添加到数组中,如下所示:

people[0] = new Student();
people[1] = new CollegeEmployee();
people[2] = new Faculty();

如果要查看每个索引中的人员类型,您需要使用instanceof。尝试查看here以获取更多帮助

使用instanceof的一个例子是:

if(people[0] instanceof Student){
    System.out.println("This person is a student");
}

或尝试使用泛型。

您可以创建ArrayList<Person>,然后可以将任何类型的人添加到此ArrayList。

e.g。

ArrayList<Person> peopleList = new ArrayList<Person>();
//People can be added like this
peopleList.add(new Student());
peopleList.add(new CollegeEmployee();)

您再次可以使用instanceof来检查每个索引中的人员类型!

如果你从不写

Person person1 = new Person(); 

在您的代码中,然后考虑使您的类抽象。

答案 6 :(得分:0)

Person是要存储在数组中的所有对象类型的公共超类。您可以基于该常用超类型创建阵列。然后,您可以访问该tpe中定义的数组中所有元素的方法,无论实际类型如何 - 行为都是在实际类型中定义的(如果不清楚,请查找java的继承)。

如果您需要基于实际类型的特定行为,则需要将数组元素强制转换为具体类型(例如,您可以使用instanceof来确定它)