2016-04-07 9 views
-1

私のカートのクラスでは、新しい項目を配列に追加するのが難しいです。私はSaleItem item = new SaleItemを試していますが、私のSaleItemは要約を保持するはずの要約であるため、私にエラーが発生します。カートクラスの部品のいくつかは間違っています。私は自分が何をしているのか知りたかったのです。助言がありますか?またはヘルプ?カートクラス新しいアイテムを追加する方法?

これは指示です: **カート構築者メソッドは、カートに入れることができるアイテムの最大数を決定する整数パラメータを入力として受け取ります。 addItemは、最初の4つの入力が追加される項目のコード、タイトル、価格および数量を表す5つの入力パラメータを取ります。 5番目の入力パラメータは、アイテムのタイプを示します(1ブック、2ディクショナリ、3オーディオCD)。追加される項目のタイプに応じて、このメソッドはユーザーに残りのインスタンス変数の値を問い合わせます。メソッドは、対応するオブジェクトをインスタンス化し、配列に追加します。 cartTotalCost:カート内のすべての商品の合計費用を返すメソッドです。 getNumBooks:カート内の書籍の数を返すメソッド。 getNumCDS:カート内のオーディオCDの数を返すメソッドです。 toString:各項目が1行で印刷される、きれいにフォーマットされたカートの出力を印刷するメソッドです。

SaleItemクラス:

public abstract class SaleItem { 
private int code; 
private String title; 
private double price; 
private int quantity; 

public SaleItem(int code, String title, double price, int quantity){ 
this.code = code; 
this.title = title; 
this.price = price; 
this.quantity = quantity; 
} 

//Getters 
public int getCode(){ 
    return this.code; 
} 
public String getTitle(){ 
    return this.title; 
} 
public double getPrice(){ 
    return this.price; 
} 
public int getQuantity(){ 
    return this.quantity; 
} 
// Setters 
public void setCode(int code){ 
    this.code = code; 
} 
public void setTitle(String title){ 
    this.title = title; 
} 
public void setPrice(double price){ 
    this.price = price; 
} 
public void setQuantity(int quantity){ 
    this.quantity = quantity; 
} 

//ItemTotalCost method 
public double itemTotalCost(){ 
    double total = this.price * this.quantity; 
    return total; 
} 

//ToString 
public String toString(){ 
    String outputItemDes = ""; 
    outputItemDes += "Code: "+ this.code; 
    outputItemDes += "Title: "+ this.title; 
    outputItemDes += "Price: "+ this.price; 
    outputItemDes += "Quantity: "+ this.quantity; 
    outputItemDes += "Item Total Cost: " + this.itemTotalCost(); 
    return outputItemDes; 
} 

}

ブッククラス:

public class Book{ 
private String author; 
private int numPages; 

public Book(int code, String title, double price, int quantity, String author, int numPages){ 
    this.author = author; 
    this.numPages = numPages; 
} 

//Getters 
public String getAuthor(){ 
    return this.author; 
} 
public int getNumPages(){ 
    return this.numPages; 
} 

//Setters 
public void setAuthor(String author){ 
    this.author = author; 
} 
public void setNumPages(int numPages){ 
    this.numPages = numPages; 
} 

//toString 
@Override 
public String toString(){ 
    String outputBookDes = ""; 
    outputBookDes += "Author: "+ this.author; 
    outputBookDes += "Number Pages: "+ this.numPages; 
    return outputBookDes; 
} 

}

AudioCDのクラス:

public class AudioCD extends SaleItem { 
private String artist; 
private String label; 
private int playingTime; 

public AudioCD(int code, String title, double price, int quantity, String artist, String label, int playingTime){ 
    super(code,title,price,quantity); 
    this.artist = artist; 
    this.label = label; 
    this.playingTime = playingTime; 
} 

//Getters 
public String getArtist(){ 
    return this.artist; 
} 
public String getLabel(){ 
    return this.label; 
} 
public int getPlayingTime(){ 
    return this.playingTime; 
} 

//Setters 
public void setArtist(String artist){ 
    this.artist = artist; 
} 
public void setLabel(String label){ 
    this.label = label; 
} 
public void setPlayingTime(int playingTime){ 
    this.playingTime = playingTime; 
} 

//toSting method as in the Book class 
@Override 
public String toString(){ 
    String outputAudioDes = ""; 
    outputAudioDes += "Artist: "+ this.artist; 
    outputAudioDes += "Label: "+ this.label; 
    outputAudioDes += "Playing Time: "+ this.playingTime; 
    return outputAudioDes; 
} 

}

カートクラス:

public class Cart { 
// Variables 
private SaleItem[] itemList; 
private int numItems; 
private Book book; 
private Dictionary dictionary; 
private AudioCD audioCD; 

//Constructors 
public Cart(int maxItems){ 
    this.numItems = 0; 
    this.itemList = new SaleItem[maxItems]; 
} 
//Setters 
public void setBook(Book book){ 
    this.book = book; 
} 
public void setDictionary(Dictionary dictionary){ 
    this.dictionary = dictionary; 
} 
public void setAudioCD(AudioCD audioCD){ 
    this.audioCD = audioCD; 
} 
//Add Item method goes into the cart 
public void addItem(int code, String title, double price, int quantity, int itemNum){ 
    int maxItems = this.itemList.length; 

    if (itemNum == 1){ 
     System.out.println(book); 
     } 
    else if (itemNum == 2){ 
     System.out.println(dictionary); 
    } 
    else if (itemNum == 3){ 
     System.out.println(audioCD); 
    } 

    if (this.numItems < maxItems){ 
     SaleItem item = new SaleItem(code,title,price,quantity,itemNum); 
     itemList[this.numItems] = item; 
     this.numItems++; 
    } 
} 
// Sums up all of the item in the cart 
public double cartTotalCost(){ 
    double cartTotal = 0; 
    for (int i = 0; i < itemList.length; i++){ 
     SaleItem item = itemList[i]; 
     double subTotal = (item.getPrice() * item.getQuantity()); 
     cartTotal += subTotal; 
    } 
    return cartTotal; 
} 
//Getters 
public Book getNumBooks(){ 
    return book; 
} 
public AudioCD getNumCDS(){ 
    return audioCD; 
} 
public String toString(){ 
    String cartDes = ""; 
    for (int i = 0; i < itemList.length; i++){ 
     cartDes += itemList[i]; 
    } 
    return cartDes; 
} 

}

+3

コードの関連部分のみを投稿してください。 – Maroun

答えて

-1

「第5の入力パラメータは、項目(1冊の本、2辞書、3のAudioCD)の種類を与えます。追加するアイテムのタイプに応じて、このメソッドはユーザーに残りのインスタンス変数の値を問い合わせます。 "

新しいSaleItemを作成することは想定されていません。あなたは、インスタンス化し、カートに追加することになっているSaleItemの種類。

あなたのコードSaleItem item = new SaleItem(code,title,price,quantity,itemNum);とにかく間違っている。

あなたSaleItemコンストラクタはpublic SaleItem(int code, String title, double price, int quantity)ので、あなたも、パラメータの正しい数を渡していませんされています。

0

CDまたは書籍は両方とも販売アイテムのタイプです。 SaleItem()コンストラクタを呼び出すことはできません。販売アイテム(CDや書籍のような)の実装のコンストラクタを呼び出す必要があります。

SaleItem item = new Book(0, "BookTitle", 5.99, 1, "Author", 500); 

もちろん、この場合の引数はあなたが作成しようとしている特定のブックに依存する:あなたが新発売アイテムを作りたい場合はこのように、最初にあなたが作るために、その後のような何かをしたいかのタイプを決定します。

割り当てに関しては、addItemメソッド内で適切なオブジェクトを作成するために必要なすべての情報をユーザーに尋ねる必要があるように思えます。だから本のために、著者、ページ数などを尋ねるでしょう。

2

あなたが取り組んでいる課題は、あなたを紹介したり継承を強化しようとしていることです。 SaleItemは、販売するアイテムがSaleItemのプロパティを継承することになっているため、抽象化しておく必要があります。 SaleItemは、たとえばAudioCDのようにインスタンス化されません。

AudioCDSaleItemの子クラスであるため、あなたはSaleItemとしてAudioCDに対処することができます。これは次のように行われることになります。

SaleItem saleItem = new AudioCD(Object parameter, Object parameter2, ...); 

Oracle'sマニュアルまたは継承のためBeginnersBook'sのドキュメントを見てみましょう。

+0

私は私の配列に追加する私のメインに置くパラメータは何でも私は、パブリックvoid addItem(intコード、文字列タイトル、倍の価格、int量、int itemNum)私のエラーを修正するようではない私のカートのクラスで自分のメソッドとしてブックを追加することによって。 – Diend

0

まず、本はSaleItemを拡張する必要があります。 paramsと もしitemNum == 1 項目=新しいブック():

適切なSaleItemをインスタンス化するための最も些細な方法は、上記のIFSステートメントの内側にあります。 他のものと同じです。

なぜカート内の特定の書籍、辞書、およびcdへの参照を保持していますか?私がそれらのために見る唯一の用法はあなたがカート内の本の数を数えようとしているということです。それがあなたが意味するものなら、それは方法ではありません。代わりにitems配列を繰り返し、ブックインスタンスを数えてください