【问题标题】:How do I print the values that have been increased within an arraylist?如何打印数组列表中增加的值?
【发布时间】:2018-12-05 16:04:26
【问题描述】:

我有这段代码,它旨在从数组列表中获取 double 类型的值,并将它们增加一个百分比。

public class Company {
static ArrayList<Employee> employees;

public Company() {
    Company.employees = new ArrayList<Employee>();
}


    public ArrayList<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(ArrayList<Employee> employees) {
        Company.employees = employees;
    }

        public void increaseSalaries(double rate) {
            if (rate <= 0.0) {
                throw new IllegalArgumentException();
            } else {
            for (int i = 0 ; i < employees.size() ; i++) {
                employees.get(i).increaseSalaries(rate);
                }
            }
        }

    public static void main(String[] args) {
        Company businesstown = new Company();
        HourlyEmployee george;
        MonthlyEmployee ambrose;
        george = new HourlyEmployee("George", "McClellan", "1537", 1.04);
        ambrose = new MonthlyEmployee("Ambrose", "Burnside", "1536", 741.0);
        businesstown.getEmployees().add(george);
        businesstown.getEmployees().add(ambrose);
        double increase = 20.0;
        System.out.println(businesstown);
        businesstown.increaseSalaries(increase);
        System.out.println(businesstown);

    } 

}

我想在增加之前和之后打印出数组列表中的对象,但我不确定如何。当前的打印命令是占位符,因为我知道它们不正确。我尝试过其他方法,例如

for (Object[] array : list) {
    System.out.println(Arrays.toString(array));
}

但这没有奏效。在这种情况下什么会起作用?

【问题讨论】:

  • 哦,男孩,您的代码有很多很多问题。该字段最好是静态的。这种解决该领域的“Company.employees”非常令人困惑。另一方面,它有点好,因为它强调“它是一个静态领域”。但正如所说:该领域不应该是静态的。然后使用“List”作为类型,例如,当您执行 List&lt;Whatever&gt; things = new ArrayList&lt;&gt;() 时,您只关心 ArrayList。然后:读一本好书。任何好书/教程都描述了如何迭代 Java 列表的问题。无需猜测如何做到这一点。
  • 另一件事:只需在您的 Employee 类上实现一个合理的 toString() 方法。然后你就可以打印这些对象,并且你会得到很好的人类可读的输出。

标签: java arraylist printing main


【解决方案1】:

您可以使用 for each 循环打印出数组的所有内容:

for(Employee e: employees){
    System.out.println(e.getSalary());
}

【讨论】:

  • Employee 没有获取薪水的方法,而是类 HourlyEmployee 和 MonthlyEmployee 扩展了 Employee,它们分别具有 getHourlySalary 和 getMonthlySalary。我该如何实现这些?
  • 将方法 getSalary() 放入 Employee 并在 HourlyEmployee 和 MonthlyEmployee 中覆盖它们。然后你可以像上图那样调用。如果您有 HourlyEmployee 或 Monthly Employee,将调用相应的方法。您可以将 MonthlyEmployee 和 HourlyEmployee 都放在 Employee 类型的数组中。如果您想研究它,这称为多态性。
  • Employee 中已经有一个方法可以为每个扩展类调用 getter,所以我使用了它。谢谢
猜你喜欢
  • 1970-01-01
  • 2015-01-11
  • 2013-10-30
  • 2019-12-12
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多