首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何消除主类中标记"public“的语法错误?

如何消除主类中标记"public“的语法错误?
EN

Stack Overflow用户
提问于 2021-04-05 19:13:24
回答 1查看 761关注 0票数 0

当我从主程序运行所需的另一个类调用构造函数时,我的主类中有一个语法错误。这个程序的重点是继承以及构造函数和参数的适当调用。这是我在编译过程中得到的错误消息:

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
        Syntax error on token "public", record expected after this token

        at a6main.main(a6main.java:7)

这是导致错误的代码行:

代码语言:javascript
运行
复制
PreferredCustomer c = new PreferredCustomer("Al", "222BurdSt", "2102223321", "46821",
"2000", true, "1000");

其余代码可以在下面找到:

代码语言:javascript
运行
复制
class person {

    String Name;
    String Address;
    String Telephone;

    person (String Name, String Address, String Telephone) {
        this.Name = Name;
        this.Address = Address;
        this.Telephone = Telephone;
    }
    
    String getName() {
        return Name;
    }
    
    String getAddress() {
        return Address;
    }
    
    String getTelephone() {
       return Telephone;
    }
    
    void setName(String Name) {
        this.Name = Name;
    }
    
    void setAddress(String Address) {
        this.Address = Address;
    }
    
    void setTelephone(String Telephone) {
        this.Telephone = Telephone;
    }
}

public class customer extends person {

    String number;
    boolean OnMailingList;

    //constructor and getters and setters

    customer (String Name, String Address, String Telephone, String number, boolean OnMailingList) {
        //inherit persons information
        super(Name, Address, Telephone);
        this.number = number;
        this.OnMailingList = OnMailingList;
    }
    
    String getnumber() {
        return number;
    }

    void setnumber(String number) {
        this.number = number;
    }

    boolean OnMailingList () {
        return OnMailingList;
    }

    void setOnMailingList(boolean OnMailingList) {
        this.OnMailingList = OnMailingList;
    }
}

public class PreferredCustomer extends customer {

    private int purchase;
    double discount;

    /**public constructor so its accessible to main
     * else ifs for certain percentage of discounts
     * getters and setters for purchase and discount
     * super to inherit other features from other classes */
    public int getpurchase() {
        return purchase;
    }

    public double getdiscount () {
        return this.discount;
    }

    public void setPurchase(int purchase) {
        this.purchase = purchase;
    }

    public PreferredCustomer(String Name, String Address, String Telephone, String number, int pur, 
                            boolean OnMailingList, double Discount, PreferredCustomer preferredCustomer) {
        
        super(Name, Address, Telephone, number, OnMailingList);

        this.purchase = pur;
        preferredCustomer.discount = discount;

        if (this.purchase>= 2000) {
            this.discount = 10;
        } else if (this.purchase>= 1500) {
            this.discount = 7;
        } else if (this.purchase>= 1000) {
            this.discount = 6;
        } else if (this.purchase >= 500) {
            this.discount = 5;
        }
    }
}
    

public class a6main {
    
    public static void main (String [] args) {
        
    public PreferredCustomer() {

    }

    PreferredCustomer c = new PreferredCustomer("Al", "222BurdSt", "2102223321", "46821","2000", true, "1000");
   
        System.out.println("Name: " + c.getName());
        System.out.println("Address: " + c.getAddress());
        System.out.println("Telephone number: " + c.getTelephone());
        System.out.println("Customer ID: " + c.getnumber());
        System.out.println("Amount spent: " + c.getpurchase());
        System.out.println("On mailing list: " + c.OnMailingList());
        System.out.println("Discount: " + c.getdiscount());
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-06 08:01:19

你在这里有几个错误。我已经修正了它们,并启动了程序,提供了如下结果:

名称: Al

地址: 222BurdSt

电话号码: 2102223321

客户ID: 46821

支出数额:2000年

邮寄名单:真

折扣: 10.0

从main方法中删除PreferredCustomer构造函数。它不能是方法的一部分,它是类的一部分。然后,PreferredCustomer的构造函数已经出现在PreferredCustomer类中。

希望您的客户类和PreferredCustomer类在单独的文件中?如果没有,将它们放入名为customer.java和PreferredCustomer.java的单独文件中。在PreferredCustomer类构造函数中,从参数中删除PreferredCustomer preferredCustomer。这是多余的:为什么您需要将一个客户传递给另一个客户?顾客之间有什么关系吗?现在,当调用构造函数时,参数的数量将匹配(不要使用字符串"2000","1000“,其中应该是整数):

代码语言:javascript
运行
复制
PreferredCustomer c = new PreferredCustomer("Al", "222BurdSt", "2102223321", "46821",
2000, true, 1000);

在PreferredCustomer构造函数中,在这里使用this而不是preferredCustomerthis.discount = Discount;和打印大写的Discount,就像构造函数的签名一样。

因此,构造函数的代码应该是:

代码语言:javascript
运行
复制
public PreferredCustomer(String Name, String Address, String Telephone, String number, int pur, boolean OnMailingList, double Discount) {
    super(Name, Address, Telephone, number, OnMailingList);
    this.purchase = pur;
    this.discount = Discount;

    if (this.purchase>= 2000) {
        this.discount = 10;
    } else if (this.purchase>= 1500) {
        this.discount = 7;
    } else if (this.purchase>= 1000) {
        this.discount = 6;
    } else if (this.purchase >= 500) {
        this.discount = 5;
    }
}

a6main类中的主要方法是:

代码语言:javascript
运行
复制
public static void main (String [] args) {
    PreferredCustomer c = new PreferredCustomer("Al", "222BurdSt", "2102223321", "46821", 2000, true, 1000);

    System.out.println("Name: " + c.getName());
    System.out.println("Address: " + c.getAddress());
    System.out.println("Telephone number: " + c.getTelephone());
    System.out.println("Customer ID: " + c.getnumber());
    System.out.println("Amount spent: " + c.getpurchase());
    System.out.println("On mailing list: " + c.OnMailingList());
    System.out.println("Discount: " + c.getdiscount());
}

注意命名惯例,就像其他人指出的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66958511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档