【问题标题】:Main will not pull information from the appropriate class. Continues to produce errorsMain 不会从适当的类中提取信息。继续产生错误
【发布时间】:2018-08-01 22:34:00
【问题描述】:

我正在学习 Java 课程的介绍,但我正忙于我的实验室工作。

我们正在设置一个具有继承的类。教授为我们提供了MainAddressPersonNamePhoneNumberPersonRecord

我们的任务是创建一个包含 CustomerID、creditCardType、creditCardNumber 和 creditCardDate 的类 CustomerRecord。我们被指示生成一个类并对“CustomerRecord 而不是 Main”进行任何必要的更改

我继续为班级设置了所有内容,但继续收到相同的错误:

Error:(20, 20) java: constructor CustomerRecord in class edu.cscc.CustomerRecord cannot be applied to given types;
required: java.lang.String,java.lang.String,java.lang.String,java.lang.String
found: edu.cscc.PersonName,edu.cscc.Address,edu.cscc.PhoneNumber,edu.cscc.PhoneNumber,edu.cscc.PhoneNumber,java.lang.String,java.lang.String,java.lang.String,java.lang.String
reason: actual and formal argument lists differ in length

以下是主要内容:

public class Main {

    public static void main(String[] args) {

        // Initialize test data
        Address address = new Address("120 North Tulip Tree Drive",
                "Jackson", "OH", "45640");
        PersonName name = new PersonName("Dr.", "Adelaide", "Penelope",
                "Aardvark", null);
        PhoneNumber homephone = new PhoneNumber(740, 555, 1005);
        PhoneNumber workphone = new PhoneNumber(740, 555, 2356);
        PhoneNumber cellphone = new PhoneNumber(614, 555, 9723);

        // TODO - after creating CustomerRecord class, uncomment the following code.

        // Create sample customer record
        CustomerRecord customer;
        customer = new CustomerRecord (name, address, homephone, workphone, cellphone,
            "123456","Visa","4111-1111-1111-1111", "12/25");

        // Print customer record report
        String namerpt = "Name: " + customer.getName().toString();

        String addressrpt = "Address: " + address.getStreetAddress() + "\n" +
                "\t" + address.getCity() + ", " + address.getState() + " " + address.getZip();

        String phonerpt = "Home Phone: " + customer.getHomePhone().toString() + "\n" +
                "Work Phone: " + customer.getWorkPhone().toString() + "\n" +
                "Mobile Phone: " + customer.getCellPhone().toString();

        System.out.println(namerpt+"\n"+addressrpt+"\n"+phonerpt+"\n"+
                "Customer ID: "+customer.getCustomerID() + "\n"+
                "Credit card type: "+customer.getCreditCardType() + "\n"+
                "Credit card number: "+customer.getCreditCardNumber() + "\n"+
                "Credit card date: "+customer.getCreditCardDate());


    }
}

下面是我创建的 Customer 类:

public class CustomerRecord {
    private String customerID;
    private String creditCardType;
    private String creditCardNumber;
    private String creditCardDate;





    public CustomerRecord(String customerID, String creditCardType, String creditCardNumber, String creditCardDate) {
        this.customerID = customerID;
        this.creditCardType = creditCardType;
        this.creditCardNumber = creditCardNumber;
        this.creditCardDate = creditCardDate;
    }
    //Accesor//Mutator

    public String getCustomerID() {
        return customerID;
    }

    public void setCustomerID(String customerID) {
        this.customerID = customerID;
    }

    public String getCreditCardType() {
        return creditCardType;
    }

    public void setCreditCardType(String creditCardType) {
        this.creditCardType = creditCardType;
    }

    public String getCreditCardNumber() {
        return creditCardNumber;
    }

    public void setCreditCardNumber(String creditCardNumber) {
        this.creditCardNumber = creditCardNumber;
    }

    public String getCreditCardDate() {
        return creditCardDate;
    }

    public void setCreditCardDate(String creditCardDate) {
        this.creditCardDate = creditCardDate;
    }


}

【问题讨论】:

  • 错误信息是不言自明的。您正在传递需要字符串的自定义类。
  • 你的 CustomerRecord 构造函数只接受 4 个字符串参数,但你用 9 个参数调用它。
  • 是的,schmosel 说的很对,你传递的是你自己的类对象,而不是Strings。要么构造函数需要编辑,要么构造函数的调用需要编辑。

标签: java class inheritance


【解决方案1】:

由于您不应该更改 Main 类,请添加必要的字段并编辑 CustomerRecord 类中的构造函数,如下所示:

private PersonName name;
private Address address;
private PhoneNumber homephone;
private PhoneNumber workphone;
private PhoneNumber cellphone;
private String customerID;
private String creditCardType;
private String creditCardNumber;
private String creditCardDate;

public CustomerRecord(PersonName name, Address address, PhoneNumber homephone, PhoneNumber workphone, PhoneNumber cellphone, String customerID, String creditCardType, String creditCardNumber, String creditCardDate) {
    this.name = name;
    this.address = address;
    this.homephone = homephone;
    this.workphone = workphone;
    this.cellphone = cellphone;
    this.customerID = customerID;
    this.creditCardType = creditCardType;
    this.creditCardNumber = creditCardNumber;
    this.creditCardDate = creditCardDate;
}

这样处理CustomerRecord构造函数的所有参数。

【讨论】:

  • Main 由教授按原样(我相信)提供。我相信OP需要使CustomerRecord符合Main的调用方式。
【解决方案2】:

你有一个只接受 String 参数的构造函数:

public CustomerRecord(String customerID, String creditCardType, String creditCardNumber, String creditCardDate) {

您必须创建一个接受 9 个参数的构造函数:

前五个是PersonNameAddressPhoneNumberPhoneNumberPhoneNumber

接下来的 4 个是你的 String 参数

因为你的 Main 方法有:

CustomerRecord customer;
    customer = new CustomerRecord(name, address, homephone, workphone, cellphone,
            "123456", "Visa", "4111-1111-1111-1111", "12/25");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2021-09-18
    • 2011-11-25
    • 2017-10-16
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多