【问题标题】:How can I access an object array located inside of another object which is then inside a superclass array?如何访问位于另一个对象内部的对象数组,然后该对象位于超类数组中?
【发布时间】:2010-11-22 20:33:41
【问题描述】:

我有一个抽象类Employee,并在此基础上创建了以下子类:

FulltimeEmployee
PartTimeEmployee
Salesman

以及一个独立的类,Orders

我使用 Orders 类通过在 Salesman 构造函数中发送一系列订单来“描述销售员”:

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;

每行代表不同类型的员工(工资 = 全职,partt = 兼职,sales = 推销员)。

我的问题是我想使用employees 数组打印每个销售员的订单。 到目前为止我所做的是

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 ");

如何访问employees 数组上Salesman 对象内的orders 数组? 我尝试过强制转换,但它不起作用,因为 Orders 不是 Employee 的子类。

我需要它来打印,例如,

推销员的命令:john koun

订单总量:13000 每个销售员的订单

订单号:1 订单日期:10/2/2010 描述:机械销售订单金额:12000

订单号:2 订单日期:20/2/2010 描述:销售零件订单量:1000

【问题讨论】:

  • 请提供您的Salesman课程的完整列表
  • 注意,构造函数参数被命名为order,但是您将其称为orders。这段代码显然不会编译。

标签: java arrays casting object


【解决方案1】:

您的 Salesman 构造函数接受 Order[] 订单,但看起来您没有在任何地方保留对它的引用(除非您在 getSalary 或注释掉的部分中这样做)。

你需要添加类似的东西

this.orders = orders;

在您的 Salesman 构造函数中,您可以将数组作为 Salesman 对象的字段/属性来引用。

通常您应该使用Bean 模式,其中每个字段都有一个getter/setter 方法:

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!

【讨论】:

  • 虽然您的答案对我来说看起来不错,但我会尝试自己将 OP 带到解决方案中,以便他通过正常的学习过程提高自己的技能,因为问题被标记为 [homework]
  • 不是工匠,而是一位优秀的高级信息和流程系统顾问,具有丰富的教学经验(无意冒犯)。
  • 感谢您的快速回复。这确实帮助我解决了我的问题,因为我在使用铸造方面没有足够的经验。另外,您对 this.orders = orders; 的看法是正确的。我完全忘了把它放在我的构造函数中,这导致了后来的所有麻烦
【解决方案2】:

如果您的意思是您有一个 Employee 数组,并且每个 Salesman(仅)有一个成员提供自己已售出的订单,那么您必须使用数组数组。

乍一看,您的Employee 数组更可能是一个向量,即一维数组。另外,您的 Salesman 类有一个 Order 数组,它似乎也是一个向量。如果这是您实际得到的,您只需遍历您的 Salesman.Orders 成员即可获得您的 Salesman 所做的销售。

由于被标记为[homework],所以我拒绝写代码,给你煮好了。

此外,还有一些提示:

  1. 您已经遍历了Employee 的数组,所以您知道如何遍历一个;

  2. 您说Salesman 派生自Employee 类,因此使Employee 可能类型转换为Salesman,然后您将获得Salesman 类的实例,这是实际的@ 987654335@是Salesman,否则应该返回null;

  3. 现在,您可以通过属性方法(getter 和 setter 方法)访问您的字段;

那么,您如何让Orders 从您的类外部访问,并将其公开为一个数组?

如果您能够将其公开为一个数组,您如何遍历一个数组以获取每个订单金额,以便您可以计算出这个Salesman 实例已售出多少?

【讨论】:

  • 非常感谢!!!,我想答案真的就在我面前!我忘了在我的推销员构造函数中设置订单对象(this.orders=order,然后陷入困境,如果我更仔细地查看我的代码,很容易解决这个问题。我真的很感谢你的帮助,你的快速回复我的问题
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
相关资源
最近更新 更多