main中的ReportPayment()方法给出了错误

时间:2018-04-06 08:57:35

标签: java

我被要求执行以下任务:

  • 存储名称,姓氏,性别,年龄的五个私有变量, AmountPayout
  • 包含一个对象实例,它有两个名为的方法。一种方法称为Info(),这将使用GUI来检索Name, 姓氏,性别,年龄,AmountPayout
  • 创建另一个名为ReportPayment()的方法,这将使用GUI来显示用户的信息。在这个方法中创建 另一个名为PaymentCalculator的方法,用于解析参数 支付金额。
  • 使用该金额扣除15%的税金,并返回要显示的最终金额。

我的代码返回:

  

必填字符串int double

public static void main(String[] args) {
    Details det = new Details();
    det.info();
    det. ReportPayment();
}

class Details
{

    private String name;
    private String surname;
    private String gender;
    private int age , age1;
    private double  AmountPayout , SubPayout;

    void info() 
    {
        String name = JOptionPane.showInputDialog(null,"Enter the Patient Name :");

        String surname = JOptionPane.showInputDialog(null,"Enter the Patient Surname :");

        String age = JOptionPane.showInputDialog(null,"Enter the age of the patient :");
        int age1 = Integer.parseInt(age);

        String gender = JOptionPane.showInputDialog(null,"Enter the Patient gender :");

        String AmountPayout = JOptionPane.showInputDialog(null,"Enter the Patient payout :");
        double SubPayout = Double.parseDouble(AmountPayout);
    }

    void ReportPayment(String name, String surname, int age, double AmountPayout) 
    {
        JOptionPane.showMessageDialog(null,"Victim of Listeriosis" + "\n"
                + "Patient Name:" + name + "" + surname + "\n"
                + "Age:" + age + "\n"
                + "Payout:" + AmountPayout);
    }
}

4 个答案:

答案 0 :(得分:0)

首先,你应该从标签中删除c#,这与它无关。

然后看看你的ReportPayment方法,正如你在方法签名中看到的那样,你有4个参数,一旦调用方法就必须经过这些参数。

所以不要写det.ReportPayment(); 您应该写det.ReportPayment("name","surname", 10, 30);以使其正常工作

但这不是你真正想要的,因为你应该使用你不需要将它们传递给方法的类属性,所以你应该将方法更改为:

// Note that we don't have parameters anymore
void reportPayment() { 
    JOptionPane.showMessageDialog(null,"Victim of Listeriosis" + "\n"
            + "Patient Name:" + name + "" + surname + "\n"
            + "Age:" + age + "\n"
            + "Payout:" + AmountPayout);
}

您的代码的最后一个问题是您没有遵循约定,这不会影响您的代码的工作方式,但它会影响其他人阅读您的代码,每当使用某些语言时,请确保熟悉其他人的标准约定代码对于将要查看它的其他开发人员来说更容易理解。

在Java中,命名标准是Camel case表示法,类名和变量/方法名称之间的区别在于类始终以大写字母开头,而变量和方法名称以小写

班级名称 - StringBuilder
方法名称 - reportPayment
变量名称 - amountPayout

Java中的另一个约定是{括号在方法签名之后才出现在下一行。

最后在其他方面要了解更多有关上述内容和其他许多内容的建议,我建议您购买/借用一些优秀的Java入门书,其中有很多。

答案 1 :(得分:0)

您的代码有两个问题:

第一期:您忘记了对det.reportPayment();的调用中的参数(请注意小写r)。 我假设您要使用Details中存储的属性。

您有两种选择:

  • 将属性作为参数传递:

    det. ReportPayment(det.name, det.surname, det.age, det.AmountPayout);
    

    请注意,如果没有更多修改,这将无效,因为这些属性是私有的。您必须将其公开或添加getter(然后将det.name替换为det.getName()等)。

  • 删除参数并直接在方法中使用Detail属性,因为该方法属于同一类(最佳解决方案)。

    void reportPayment() {
        JOptionPane.showMessageDialog(null, "Victim of Listeriosis" + "\n" + "Patient Name:" + this.name + "" + this.surname
            + "\n" + "Age:" + this.age + "\n" + "Payout:" + this.AmountPayout);
    }
    

第二个问题:您从未设置过您的类属性。

info()方法中,您要求用户提供值。这些值存储在临时变量中,但不存储在类属性中。 例如,推送this.name中的值,而不是创建新的String name

    this.name = JOptionPane.showInputDialog(null, "Enter the Patient Name :");
    this.surname = JOptionPane.showInputDialog(null, "Enter the Patient Surname :");

等等。

无关:看看java naming convention

答案 2 :(得分:0)

  • 在info()方法中添加“this”使名称,姓氏和性别工作,但年龄和AmountPayout仍然返回null

    public static void main(String [] args){

    zoomTo

    }

} 课程详情{

Details det = new Details();
det.info();
det.reportPayment();

答案 3 :(得分:-1)

重写了答案: 我试着自己运行代码,稍加调整就可以了。我们到了那里。我认为这是你应该需要的全部内容!

现在应该修复您的错误以及符合您的要求。

我改变了:

  • 将ReportPayment()重命名为reportPayment()
  • 删除了中间的空间 “DET”。和“主类
  • 中的”ReportPayment()
  • 重写了你的属性
  • 重写了info()方法
  • 根据需要添加了税收计算

Main.java

public class Main {
    private static boolean running = true;

    public static void main(String[] args) {

        Details det = new Details();
        det.info();
        det.reportPayment();
    }

}

Details.java

import javax.swing.JOptionPane;

class Details {
    private String name;
    private String surname;
    private int age;
    private String gender;
    private double AmountPayout;

    void info() {
        this.name = JOptionPane.showInputDialog(null, "Enter the Patient Name :");
        this.surname = JOptionPane.showInputDialog(null, "Enter the Patient Surname :");
        String rawAge = JOptionPane.showInputDialog(null, "Enter the age of the patient :");
        this.age = Integer.parseInt(rawAge);
        this.gender = JOptionPane.showInputDialog(null, "Enter the Patient gender :");
        String rawPayout = JOptionPane.showInputDialog(null, "Enter the Patient payout :");
        this.AmountPayout = Double.parseDouble(rawPayout);


    }

    void reportPayment() {
        paymentCalculator();
        JOptionPane.showMessageDialog(null, "Victim of Listeriosis" + "\n" + "Patient Name:" + name + " " + surname
                + "\n" + "Age:" + age + "\n" + "Payout:" + AmountPayout);

    }

    private void paymentCalculator() {
        this.AmountPayout = this.AmountPayout * 0.85;
    }
}