-2

还有一个项目问题......我有一个 BookOrder 类如下......

import java.text.DecimalFormat;

public class BookOrder
{
    private String author;      
    private String title;
    private int quantity;
    private double costPerBook;
    private String orderDate;
    private double weight;
    private char type;      //R,O,F,U,N

    public BookOrder (String author, String title)
    {
    }

    public BookOrder(String author, String title, int quanitity, double costPerBook, String orderDate, double weight, char type)
    {
    }

    public BookOrder(BookOrder bookOrder)
    {
    }

    public void setAuthor(String author)
    {
        this.author= author;
    }

    public void setTitle(String title)
    {
        this.title= title;
    }

    public void setQuantity(int quantity)
    {
        if (quantity >=0)
            this.quantity= quantity;
    }

    public void setCostPerBook(double costPerBook)
    {
        if (costPerBook >= 0)
            this.costPerBook= costPerBook;
    }

    public void setOrderDate(String orderDate)
    {
        this.orderDate= orderDate;
    }

    public void setWeight(double weight)
    {
        if (weight >=0)
            this.weight=weight;
    }

    public void setType(char type)
    {
        if (type=='r' || type=='R' || type=='o' || type=='O' || type=='f' || type=='F' || type=='u'|| type=='U'|| type=='n'|| type=='N')
        {   
            if(type < 97)       // all values below 97 are caps
                this.type = type;
            else    
                this.type = ((String.valueOf(type)).toUpperCase()).charAt(0);       // had to research, but converted char to a string, capitalized it, then converted back to char.
        }
        else
            this.type= 'N';
    }

    public void assignValues(int quantity, double costPerBook, double weight, char type)
    {
    }


    public String getAuthor()
    {
        String strAuthor;
        strAuthor=this.author;
        return strAuthor;
    }   //end Public String getAuthor

    public String getTitle()
    {
        String strTitle;
        strTitle=this.title;
        return strTitle;
    }

    public int getQuantity()
    {
        int iQuant;
        iQuant=this.quantity;
        return iQuant;
    }

    public double getCostPerBook()
    {
        double dCostPerBook;
        dCostPerBook=this.costPerBook;
        return dCostPerBook;
    }

    public String getOrderDate()
    {
        String strOrderDate;
        strOrderDate=this.orderDate;
        return strOrderDate;
    }

    public double getWeight()
    {
        double dWeight;
        dWeight=this.weight;
        return dWeight;
    }

    public char getType()
    {
        char cType;
        cType=this.type;
        return cType;
    }

    public void adjustQuantity(int adjustingQuantity)
    { 
        int iNewQuantity = (this.quantity + adjustingQuantity);
        if (iNewQuantity >= 0)
            this.quantity = iNewQuantity;
        else
            this.quantity = 0;
    }

    public double totalWeight()
    {
        double dTotalWeight;
        dTotalWeight= (this.quantity * this.weight);
        return dTotalWeight;
    }

    public double calcCost()
    {
    double dCalculatedCost;
    dCalculatedCost= (this.quantity * this.costPerBook);
    return dCalculatedCost;
    }

    public double shipping()
    {
        double dShipping;
        double dShippingCost;

        if(this.type=='R')
        {
            dShippingCost= 0.30;
            dShipping=(dShippingCost * (this.quantity * this.weight));
        }
        else if (this.type=='O')
        {
            dShippingCost= 0.50;
            dShipping=(dShippingCost *(this.quantity * this.weight));
        }
        else if (this.type=='P')
        {
            dShippingCost= 0.10;
            dShipping=(dShippingCost * (this.quantity * this.weight));
        }
        else if (this.type=='F')
        {
            dShippingCost=0.25;
            dShipping=(dShippingCost * (this.quantity * this.weight));
        }
        else if (this.type=='U')
        {
            dShippingCost=0.30;
            dShipping=(dShippingCost * (this.quantity * this.weight));
        }
        else
        {
            dShippingCost= .05;
            dShipping=(dShippingCost * (this.quantity * this.weight));
        }
        return dShipping;
    }

    public double totalCost()       //calcCost+shipping
    {
        double dTotalCost;
        dTotalCost= (calcCost() + shipping());
        return dTotalCost;
    }

    public String invoice()
    {
        DecimalFormat df= new DecimalFormat ("$#,#00.00");
        String strInvoice;

        strInvoice="\n Author: " + this.author;
        strInvoice +="\n Title: " + this.title;
        strInvoice +="\n Quantity: " + this.quantity;
        strInvoice +="\n Cost Per Book: " + df.format(this.costPerBook);
        strInvoice +="\n Order Date: " + this.orderDate;
        strInvoice +="\n Total Weight: " + totalWeight();
        strInvoice +="\n Shipping Type: " + this.type;
        strInvoice +="\n Shipping Cost: " + df.format(shipping());
        strInvoice +="\n Total Cost: " + df.format(totalCost());

        return strInvoice;
    }
}

它编译没有问题。然后我正在运行我的主要方法......并输入

BookOrder BookOrder1 = new BookOrder("Jonathan", "Book1", 12, 6.75, "11/5/2013", 8.75, 'r');
System.out.print(""+ BookOrder1.invoice());

然而,每当它打印我的结果时,所有内容的结果都是空或零。任何人都知道这是为什么?我认为这很简单,但我不确定是什么...}

4

4 回答 4

2

因为您没有在构造函数中初始化任何东西,所以它为类中的所有变量采用默认值。所以你可以改变你的构造函数:

private String author;      
private String title;
private int quantity;
private double costPerBook;
private String orderDate;
private double weight;
private char type;      //R,O,F,U,N

public BookOrder(String author, String title, int quanitity, double costPerBook, String orderDate, double weight, char type)
{
  this.author = author; 
  this.title =title;
  this.quanitity =quanitity;

  // others also
}
于 2013-11-06T05:38:11.330 回答
1

因为您的构造函数没有为实例变量分配任何值。因此,默认情况下,所有引用变量都分配给null,原语分配给00.0等等。

public BookOrder(String author, String title, int quanitity, 
                  double costPerBook, String orderDate, double weight, char type)
{
   // empty body
}

您应该将调用构造函数时传递的参数分配给实例变量,例如:

public BookOrder(String author, String title, int quanitity, 
                  double costPerBook, String orderDate, double weight, char type)
{
   this.author = author;
   ..............
}
于 2013-11-06T05:37:58.780 回答
0

初始化构造函数

注意实例变量数量的构造函数参数数量(拼写错误)。(虽然没有伤害)。

您可以使用以下代码。

public BookOrder(String author, String title, int quanitity, double costPerBook, String orderDate, double weight, char type)
{
    this.author=author;
    this.title=title;
    this.quantity=quanitity;
    this.costPerBook=costPerBook;
    this.orderDate=orderDate;
    this.weight=weight;
    this.type=type;
}
于 2013-11-06T05:40:11.430 回答
0

您需要在构造函数中分配值

您需要更改构造函数

    public BookOrder(String author, String title, int quanitity, double costPerBook, String orderDate, double weight, char type)
    {

    }

喜欢这个

    public BookOrder(String author, String title, int quanitity, double costPerBook, String orderDate, double weight, char type)
    {
           this.author =author;      
           this.title =title;
           this.quantity=quantity;
           this.costPerBook=costPerBook;
           this.orderDate=orderDate;
           this.weight=weight;
           this.type =type ;

    }
于 2013-11-06T05:41:42.763 回答