-3

我几乎完成了一个 Java 程序,但我正在编译。这个程序是一个关于继承的演示,有 4 个类(包括一个驱动程序),但我在上述驱动程序上遇到了 4 个错误。我在使程序通用(允许用户输入)方面也存在问题,因为我试图读取的数据是不同类型的。我想我需要在某个地方使用 valueOf,但我们在课堂上还没有走那么远。我为篇幅道歉。

以下是规格:

定义一个名为 Payment 的类,该类包含一个 double 类型的实例变量,该变量存储支付金额以及适当的访问器和修改器方法。还要创建一个名为 paymentDetails 的方法,它输出一个英文句子来描述付款金额。接下来,定义一个派生自 Payment 的名为 CashPayment 的类。

此类应重新定义 paymentDetails 方法以指示付款是现金。包括适当的构造函数。定义一个派生自 Payment 的名为 CreditCardPayment 的类。此类应包含卡上姓名、到期日期和信用卡号的实例变量。

包括适当的构造函数。最后,重新定义 paymentDetails 方法以在打印输出中包含所有信用卡信息。创建 main 方法,该方法创建至少两个 CashPayment 和两个具有不同值的 CreditCardPayment 对象,并为每个对象调用 paymentDetails。一定要使程序通用,以便用户可以输入数据!!!

这是错误消息之一:

C:\Program Files\Java\jdk1.8.0_60\bin\ghp3driver.java:21:错误:不兼容的类型:字符串无法转换为付款

这是代码...

 import java.util.*; //new file/class

 class ghp3driver {
     public static void main(String[] args) {
         Scanner user_input = new Scanner(System.in);
         Payment cash1 = user_input.next();
         Payment cash2 = user_input.next();
         Payment credit1 =
             user_input.next();
         Payment credit2 =
             user_input.next();
         System.out.println("Cash 1 details:");
         cash1.paymentDetails();
         System.out.println();
         System.out.println("Cash 2 details:");
         cash2.paymentDetails();
         System.out.println();

         System.out.println("Credit 1 details:");
         credit1.paymentDetails();
         System.out.println();
         System.out.println("Credit 2 details:");
         credit2.paymentDetails();
         System.out.println();
     }
 }

 import java.util.*; //NEW FILE/CLASS

 public class Payment {
     private double amount;
     public Payment() { //constructor
         amount = 0.0;
     }

     public Payment(double paymentAmount) { //initializes payment amount
         amount = paymentAmount;
     }

     public void setPayment(double paymentAmount) {
         amount = paymentAmount;
     }

     public double getPayment() {
         return amount;
     }

     public void paymentDetails() {
         System.out.println("The payment amount is " + amount);
     }

 }
 class CreditCardPayment extends Payment {
     private String date, name, ccn;

     public CreditCardPayment(double amount, String date, String name, String ccn) {
         super(amount);
         this.date = date;
         this.name = name;
         this.ccn = ccn;
     }

     public void paymentDetails() { //printing
         System.out.println("Name on card: " + this.getName());
         System.out.println("Expiration date: " + this.getDate());
         System.out.println("Credit card number: " + this.getCcn());
         System.out.println("The payment by credit card amount is " + getPayment());

     }

     public String getCcn() {
         return ccn;
     }

     public void setCcn(String ccn) {
         this.ccn = ccn;
     }

     public String getDate() {
         return date;
     }

     public void setDate(String date) {
         this.date = date;
     }

     public String getName() {
         return name;
     }

     public void setName(String name) {
         this.name = name;
     }
 }

 class CashPayment extends Payment {

     public CashPayment(double paymentAmount) {
         super(paymentAmount);
     }

     public void paymentDetails() {
         System.out.println("The payment cash amount is " + this.getPayment());
     }
 }
4

1 回答 1

0

你的陈述

Payment cash1 = user_input.next( );
Payment cash2 = user_input.next( );
Payment credit1 =
user_input.next( );
Payment credit2 =
user_input.next( );

您不能将字符串值分配给不同的类正确的用法如下所示

Payment cash1 = new Payment();
Payment cash2 = new Payment();
Payment credit1 = new Payment();
Payment credit2 = new Payment();

cash1.setPayment(new Double(user_input.next( )));
cash2.setPayment(new Double(user_input.next( )));
credit1.setPayment(new Double(user_input.next( )));
credit2.setPayment(new Double(user_input.next( )));

此外,您的代码有一个警告“资源泄漏:'user_input' 永远不会关闭”你需要解决这个问题。

我的建议是,在开始提出问题以纠正代码之前,您需要更多地学习 Java 编程语言。您缺少非常重要的基本要点。

于 2015-10-22T22:02:04.337 回答