Мне нужна помощь в разработке массива - PullRequest
1 голос
/ 28 марта 2012

Для моей домашней работы нам было поручено создать:

Person класс с переменными firstName, lastName, streetAddress, zipCode и phone.

CollegeEmployee расширяет Person и добавляетssn, salary, и deptName.

Faculty расширяет CollegeEmployee путем добавления логического значения tenure.

И последнее, но не менее важное: Student расширяет person, добавляя GPA и major.

Все выглядит хорошо на экране, и я перехожу к следующемучасть задания, которая заключается в создании 14 записей (7 студентов, 4 сотрудника и 3 преподавателя) в массиве.

3 разных класса с несколькими типами данных, и я не могу на всю жизнь понять, как заполнить массив этим.Это первый массив, который я создал и который не был полностью целочисленным.Учебные руководства по Java ничего мне не дали, и хотя Java: универсальные статические многомерные массивы содержат некоторую полезную информацию, это немного больше, чем я могу обернуть прямо сейчас.

Сначала я думал о создании array[14][10] - четырнадцать переменных для десяти объектов - но я не могу смешивать типы данных.Вот где я заблудился.

Кто-нибудь есть какие-либо предложения о том, как спроектировать этот массив и иметь возможность отображать значения из него впоследствии?

Будем благодарны за любые советы и пожелания!

Спасибо.

Ответы [ 7 ]

3 голосов
/ 28 марта 2012

Насколько я понимаю, не нужно увлекаться многомерными массивами.

1) Создайте массив, который принимает Person экземпляров.

Person [] myPeeps = new Person[14];

2) Создайте метод print для Person, который подклассы переопределяют для печати соответствующей информации.

Поскольку ваш массив ожидает Person экземпляров, вы можете поместить экземпляры любых подклассов Person, поскольку подклассы всегда имеют отношение is-a со своим суперклассом.

Поскольку у Person есть метод print, вы можете вызывать print для всего, что вы извлекаете из массива. Подклассы предоставляют свои собственные реализации, чтобы они могли печатать свои соответствующие данные. Таким образом, вы на самом деле не заботитесь о том, какой подкласс какой-либо конкретный экземпляр; правильная реализация print для экземпляра вызывается во время выполнения.

2 голосов
/ 28 марта 2012

Вам не нужен многомерный массив. Вы можете создать массив объектов Person.

Person[] people = new Person[14];
people[0] = new Student();
people[1] = new Employee();
.
.
.
1 голос
/ 28 марта 2012

Вы также можете создать массив Person[], так же как и массив int[]. например,

Person[] people = new Person[14]

Затем вы можете добавлять людей в массив следующим образом:

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

Если вы хотите проверить, какой тип человека входит в каждый индекс, вы хотите использовать instanceof. Попробуйте поискать здесь для получения дополнительной помощи

Один из примеров использования instanceof:

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

Или попробуйте использовать дженерики.

Вы можете создать ArrayList<Person> и затем добавить любого человека в этот список ArrayList.

* * 1 022, например,
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(); 

В вашем коде подумайте о том, чтобы сделать ваш класс абстрактным.

1 голос
/ 28 марта 2012

Поскольку все они имеют тип 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
}
  • Ознакомьтесь с учебником по наследованию
1 голос
/ 28 марта 2012

Именно поэтому объектно-ориентированное программирование так прекрасно. Если вы заметите, все Faculty, CollegeEmployee и Student являются подмножеством типа Person. По этой причине вы можете хранить их все в одном наборе данных, если он объявлен как тип Person.

Person[] array = new Person[14];

Вы можете добавить все свои объекты в этот массив; Однако будьте осторожны. Когда вы переходите к использованию элементов массива, Java теперь знает только то, что у каждого есть методы, которые есть у Person, поэтому вы можете использовать только firstName, lastName, streetAddress, zipCode и phone из этих элементов, если только вы не разыгрываете объекты после их получения.

1 голос
/ 28 марта 2012

Для начала:

Person [] myArray = new Person [14];

0 голосов
/ 28 марта 2012

Класс Person является общим суперклассом для всех типов объектов, которые вы хотите сохранить в массиве. Вы можете создать массив на основе этого общего супертипа. Затем вы можете получить доступ к методам, которые определены в этом типе для всех элементов массива, независимо от фактического типа - поведение такое, как определено в фактическом типе (посмотрите наследование для Java, если это не ясно).

Если вам нужно определенное поведение, основанное на фактическом типе, вам нужно привести элемент массива к конкретному типу (вы можете определить его, например, с помощью instanceof)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...