Вызывающий метод из другого класса — Ошибка: конструктор Customer в классе Customer не может быть применен к заданным типам

#java

#java

Вопрос:

Я пытаюсь настроить код в методе richestCustomer() класса Store, чтобы использовать метод hasMoreMoneyThan(), но я продолжаю получать сообщение об ошибке «конструктор Customer в классе Customer не может быть применен к заданным типам»

Кто-нибудь знает, как это исправить?

КЛАСС CUSTOMER:

 public class Customer {
  private String name;
  private int age;
  private float money;
  public Customer(String n, int a, float m) {
    name = n;
    age = a;
    money = m;
  }
  public String toString() {
    return "Customer "   name   ": a "   age   " year old with $"   money;
  }

  public String getName(){
    return name;
  }
  public int getAge(){
    return age;
  }

  public boolean hasMoreMoneyThan(Customer c){
    if(this.money > c.money){
      return true;
    }else{
      return false;
    }
  }
}
  

КЛАСС ХРАНЕНИЯ:

 public class Store {
  public static final int MAX_CUSTOMERS = 500;
  String name;
  Customer[] customers;
  int customerCount;
  public Store(String n) {
    name = n;
    customers = new Customer[MAX_CUSTOMERS];
    customerCount = 0;
  }
  public void addCustomer(Customer c) {
    if (customerCount < MAX_CUSTOMERS)
      customers[customerCount  ] = c;
  }
  public void listCustomers() {
    for (int i=0; i<customerCount; i  )
      System.out.println(customers[i]);
  }
  public int averageCustomerAge(){
    int sum = 0;
    for(int i = 0; i < customerCount; i  ){
      sum  = customers[i].getAge();
    }
    int averageAge = sum/customerCount;
    return averageAge;
  }

  public Customer richestCustomer(){
    Customer richest = new Customer();
    for(int i = 0; i < customerCount; i  ){
      if(customers[i].hasMoreMoneyThan(richest)){
        richest = customers[i];
      }
    }
    return richest;
  }
  

Ответ №1:

Когда вы определяете пользовательский конструктор в классе, конструктор по умолчанию больше не включается по умолчанию в класс, вам нужно явно определить его. Либо определите конструктор по умолчанию в вашем классе Customer, либо используйте тот, который вы определили, передав значения по умолчанию.

Customer richest = new Customer(null, 0, 0f);

Лучшей реализацией вашего метода будет считать первого клиента самым богатым и сравнивать с остальными:

 public Customer richestCustomer(){
    if(customerCount <= 0) {
        return null; // or throw exception
    }
    Customer richest = customers[0];
    for(int i = 1; i < customerCount; i  ){
        if(customers[i].hasMoreMoneyThan(richest)){
            richest = customers[i];
        }
    }
    return richest;
}