2015-10-22 23 views
-3

我几乎完成了一个Java程序,但我正在编译一个障碍。 这个程序是继承的示范,有4个类(包括一个驱动程序),但是我在上述驱动程序上收到4个错误。由于我试图读取的数据具有不同的类型,因此我还有一个使程序通用(允许用户输入)的问题。我认为我需要在某个地方使用价值,但是我们的课没有那么远。我对这个长度表示歉意。Java继承演示 - 在用户输入和不兼容的类型

这里是规格:

定义一个名为 付款 是 包含存储 金额支付和适当的访问和mutator方法的类型 双 的实例变量类。 也创建一个名为 的方法 paymentDetails 输出英语句子来描述付款金额。 接下来,defi ne等级名为 CashPayment 即衍生自 支付。

此类应 重新定义 paymentDetails 方法,以表明支付现金。包含适当的 构造函数。 定义一个类 CreditCardPayment 从 派生支付 。 该类应包含卡上名称,到期日期和信用卡号的实例变量。

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

以下是错误消息之一:

C:\Program Files\Java\jdk1.8.0_60\bin\ghp3driver.java:21: error: incompatible types: String cannot be converted to Payment

这里是代码...

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()); 
    } 
} 
+2

您认为_String无法转换为Payment_是什么意思? –

+0

您认为_Payment cash1 = user_input.next(); _应该做什么?你为什么这么认为? –

+0

那么,用户输入字符串不能转换为付款(双),我试图找到一种解决办法。至于付款cash1 = user_input.next():它将输入从键盘分配给cash1,这是稍后显示的值。 – csheroe

回答

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编程语言。你缺少非常重要的基本点。

+0

使用生成不同的类型付款需要原始* double *。 – ChiefTwoPencils

+0

谢谢指出, – Acewin

+0

考虑[this](http://stackoverflow.com/questions/9004370/what-is-the-difference-between-new-doublesomestring-and-double-parsedoublesom)以及... – ChiefTwoPencils