BookOrder class isn't rendering results in Tes

2019-09-21 16:52发布

问题:

Yet another project question... I have a BookOrder Class as follows...

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;
    }
}

It compiled no problem. Then I was running my main method... and put in

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

Yet whenever it printed my resutls, the results for everything was null or zero. Anyone have idea why this is? I think it's something simple but I'm not sure what... }

回答1:

Because you are not initializing any thing in your constructor so it takes default value for all variable in you class. So you can change your constructor like :

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
}


回答2:

Because your constructor is not assigning any values to the instance variables . Hence by default all reference variables are assigned to null and primitives to 0,0.0 etc..

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

You should assign the parameters passed while invoking the constructor to the instance variables like :

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


回答3:

Initialize the constructor

Watch out for the constructor parameter quanitity(spell mistake) against the instance variable quantity.(No Harm though).

You can use the below code.

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;
}


回答4:

You need to assign values within your constructor

You need to change the constructor

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

    }

to like this

    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 ;

    }


标签: java class