Как я могу получить доступ к массиву объектов, расположенному внутри другого объекта, который находится внутри массива суперкласса? - PullRequest
1 голос
/ 22 ноября 2010

У меня есть абстрактный класс Employee, и на основании этого я создал следующие подклассы:

FulltimeEmployee
PartTimeEmployee
Salesman

а также один отдельный класс, Orders.

Я использую класс Orders, чтобы «описать продавца», отправив массив заказов в конструкторе Продавца:

public Salesman(String firstname, String lastname,int code, String address,
                String city,int tk,int phone,String email,int deptcode,int card,
                double hours,String cat,int orderno,double salary,
                Orders[] order){
 super(  firstname, lastname, code,  address, city, tk, phone, email, deptcode,
         card, hours, cat );
 this.orderno=orderno;

 setBaseSalary( salary );
 getSalary(orders);
 /////////////////

 }

Позже я использую этот массив для расчета бонуса, который получает продавец, в зависимости от объема продаж, который он делает.

В main я создал массив типа Employee:

Employee employees[] = new Employee[ 7 ];
   employees[ 0 ] = salary1;
   employees[ 1 ] = salary2;
   employees[ 2 ] = salary3;
   employees[ 3 ] = partt1;
   employees[ 4 ] = partt2;
   employees[ 5 ] = sales1;
   employees[ 6 ] = sales;

, где в каждой строке указан отдельный тип сотрудника (зарплата = полный рабочий день, частичная занятость = неполный рабочий день и продавец = продавец).

Моя проблема в том, что я хочу напечатать заказы каждого продавцаиспользуя массив сотрудников.До сих пор я делал

for (int i=5;i<employees.length;i++){
              System.out.printf("Orders of Salesman: %S %S",
                  employees[i].getName(),employees[i].getSurname());
              System.out.printf(" Total amount(money) from orders: %,.0f ",
                  employees[i].earnings());
              int j=0;
              ((Salesman)employees[i]).getOrderNo(arr) ;
              //((Orders)employees[i]).getOrderNo();
              System.out.printf("ordernumber: %d  orderdate:%s  description: %s
                  order amount(money): %,.0f\n ");

           }

Проблема возникает здесь:

System.out.printf("ordernumber: %d orderdate:%s description: %s order amount(money): %,.0f\n ");

Как мне получить доступ к массиву заказов внутри объекта Salesman вмассив сотрудников?Я пробовал кастовать, но это не сработает, потому что Orders не является подклассом Employee.

Мне нужно его напечатать, например,

Orders of Salesman: john koun

Общая сумма заказов: 13000 заказов на одного продавца

Номер заказа: 1 Дата заказа: 02.10.2010 Описание: сумма заказа на продажу техники: 12000

Номер заказа:2 дата заказа: 20.02.2010 описание: продажа деталей сумма заказа: 1000

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

ваш Salesman конструктор принимает Order[] ордера, но не похоже, что вы сохраняете ссылку на него где-либо (если вы не делаете это в getSalary или в закомментированной части).

Вам нужно будет добавить что-то вроде

this.orders = orders;

в ваш конструктор Salesman, чтобы вы могли ссылаться на массив как поле / свойство объекта Salesman.

Как правило, вы должны использовать шаблон Bean, в котором каждое поле имеет метод получения / установки:

public Order[] getOrders(){
    return orders;
}

public void setOrders(Order[] orders){
    this.orders=orders;
}

, затем в конструкторе добавьте setOrders(orders);

, а затем в свойкод отладки / вывода добавить:

Salesman salesman = (Salesman) employees[i];
for (Order order : salesman.getOrders())
    System.out.println(order); // i don't know what fields order has!
0 голосов
/ 22 ноября 2010

Если вы говорите, что у вас есть массив Employee, и у каждого Salesman (только) есть член, который предоставляет проданные ордера, то вам нужно работать с массивом массива.

На первый взгляд, ваш массив Employee является более вероятным вектором, то есть одномерным массивом. Кроме того, ваш класс Salesman имеет массив Order, который также представляется вектором. Если это то, что вы на самом деле получили, вам нужно всего лишь пройти через своего Salesman.Orders участника, чтобы получить продажи, которые Salesman сделал.

Поскольку он помечен как [homework], я отказываюсь писать код и даю вам все приготовленное для вас.

Кроме того, вот несколько советов:

  1. Вы уже перебираете массив Employee, поэтому вы знаете, как перебирать один из них;

  2. Вы говорите, что Salesman происходит от класса Employee, следовательно, Employee возможно с возможностью преобразования типов в Salesman, и тогда вы получите свой экземпляр класса Salesman, это это фактическое Employee - Salesman, в противном случае оно должно возвращать ноль;

  3. Теперь вы получаете доступ к своим полям через методы свойств (методы getters и setters);

Итак, как вы могли бы сделать Orders доступным извне вашего класса и выставить его в виде массива?

Если вам удалось представить его в виде массива, как выполнить итерацию по массиву для получения суммы каждого заказа, чтобы можно было рассчитать, сколько продано этого экземпляра Salesman?

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