如何创建地址线方法?

时间:2016-03-04 22:38:47

标签: java

我在使用以下第1行到第4行添加新行时遇到问题,作为InvoiceLine类的实例添加到我的Invoice类中。

实例变量:

  • Line1:InvoiceLine类型的变量
  • Line2:InvoiceLine类的变量。
  • Line3:InvoiceLine类的变量。
  • Line4:InvoiceLine类的变量。

addLine是一种采用以下四个输入参数的方法:商品编号,商品描述,商品价格和数量。

只有当发票少于四行时,该方法才会在发票中添加一行。如果发票已有四行,则此方法应打印错误消息。

如何才能使其正常工作?我将不胜感激任何帮助。

发票类:

public class Invoice {
    // Instance Variables
    private String customerName;
    private int numItems;
    private InvoiceLine line1;
    private InvoiceLine line2;
    private InvoiceLine line3;
    private InvoiceLine line4;

    // Contructors
    public Invoice(){}

    public Invoice(String customerNam){
        customerName = customerNam;
    }

    //Getters
    public String getCustomerName(){
        return customerName;
    }

    //Setters 
    private void setCustomerName(String customerNam){
        customerName = customerNam;
    }

    public void addLine(int itemNum, String Description, double itemPrice, int quantity){
        if (numItems <= 4) {
            numItems += line1;
            if (numItems <= 4)
                numItems += line2;
                if (numItems <= 4)
                    numItems += line3;
                    if (numItems <= 4)
                        numItems += line4;
        }

        if (numItems == 4){
            System.out.print("Error");
        }
    }

    public double getInvoiceTotal(){
        numItems *= numItems;
        return numItems;
    }

    public String toString(){
        String invoiceOutput = "";
        invoiceOutput += (customerName + " brought "+ numItems);
        return invoiceOutput;
    }
}

InvoiceLine类:

public class InvoiceLine {
    //Instance Variables
    private Item itemSold;
    private int quantity;
    public double total = 0;

    // Constructors
    public InvoiceLine(){}

    public InvoiceLine(Item itemSold, int quantity){
        this.itemSold = itemSold;
        this.quantity = quantity;
    }

    public InvoiceLine(int itemNum, String itemDescription, double itemPrice, int quantity){
        this.itemSold = new Item(itemNum, itemDescription, itemPrice);
        this.quantity = quantity;   
    }

    //Getters 
    public Item getItemSold() {
        return itemSold;
    }

    public int getQuantity(){
        return quantity;
    }

    //Setters
    private void setItemSold(Item itemSold){
        this.itemSold = itemSold;
    }

    private void setQuantity(int quantity){
        this.quantity = quantity;
    }

    // Methods
    public double getLineTotal(double total){
        total = (quantity * itemSold.getItemPrice());
        return total;
    }

    public String toString(){
        String invoiceLine = "";
        invoiceLine = (itemSold + " brought "+ quantity + ", which the total cost is "+ total);
        return invoiceLine;
    }   
}

1 个答案:

答案 0 :(得分:1)

您似乎希望重新使用addLine方法。根据您为此方法提供的描述(我假设是来自您的分配),听起来这个方法应该为InvoiceLine设置一个Invoice实例变量。我不想为你编写解决方案,因为这是一项任务,所以关键是要从中学习!但是这里有一些关注重点的提示:

  • 注意Invoice类中的实例变量类型。你正试图&#34;添加&#34;这些是numItems变量,其类型为int。这不会很好用!
  • 您不必担心numItems方法中多次检查addLines值。一旦你检查它并看到它少于4,你知道你应该有可用的行添加!
  • 如果您添加行,则需要创建一些新的InvoiceLine。看一下那个类的构造函数。您应该看到其中一个适用于addLine方法中给出的参数。

我要指出的一件重要事情虽然可以帮助您避免更多乏味的打嗝:您将要将numItems变量初始化为0!您可以在构造函数中执行此操作,也可以在其声明中设置其默认值,如下所示:private int numItems = 0;

然后,记住必须在方法中增加/减少此变量,无论何时添加或删除行,它都不是自动的。因此,您在addLine方法中要做的最后一件事是numItems++。但只有一切都成功添加! (换句话说,如果该方法实际上无法添加一行,因为已经有4行,那么您不想增加numItems)。

希望有助于指明您正确的方向!我再试一次,看看你能走多远。如果您遇到其他具体问题而无法解决,请随时发表评论。