在我的购物车类中,我很难在数组中添加新项目。我尝试SaleItem item = new SaleItem,但它给了我一个错误,因为我的SaleItem是一个抽象,我们应该保留抽象。购物车类中的一些部件是错误的,我希望我知道我在做什么。有什么建议?还是帮忙?
这是方向: ** Cart构造函数方法将整数参数作为输入,该参数确定可以放入购物车中的最大项目数。 addItem,它接受五个输入参数,其中前四个输入表示要添加的项目的代码,标题,价格和数量。第五个输入参数给出项目的类型(1 Book,2 Dictionary,3 AudioCD)。根据要添加的项目的类型,该方法向用户询问剩余实例变量的值。然后,该方法实例化相应的对象并将其添加到数组中。 cartTotalCost:一种返回购物车中所有商品总费用的方法。 getNumBooks:一种返回购物车中书籍数量的方法。 getNumCDS:一种返回购物车中音频CD数量的方法。 toString:一种方法,用于打印购物车的格式良好的输出,其中每个项目都打印在一行中。
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 Class:
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;
}
}
Cart CLass:
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;
}
}
答案 0 :(得分:2)
您正在进行的任务是尝试向您介绍或加强您的继承技能。 elif bmi >= 32:
将保持抽象,因为要销售的商品应该继承SaleItem
的属性。 SaleItem
不会被实例化,就像它是SaleItem
一样。
您可以将AudioCD
作为AudioCD
来解决,因为SaleItem
是AudioCD
的子类。这将是这样做的:
SaleItem
查看Oracle's文档或BeginnersBook's文档以获取继承。
答案 1 :(得分:0)
CD或书籍都是销售商品的类型。你不能调用SaleItem()构造函数 - 你必须调用销售项目实现的构造函数(如CD或书)。因此,如果您想制作一个新的销售商品,首先要确定您想要制作的类型,然后执行以下操作:
<?php
if(isset($_GET["id"]))
{
if($_GET["id"]==1)
{
echo "This is an apple";
}
else if($_GET["id"]==2)
{
echo "This is an orange";
}
}
?>
显然,本案中的论据取决于您要创建的具体书籍。
至于分配,听起来你需要询问用户在addItem方法中创建正确对象所需的所有信息。因此,对于一本书,你会要求作者,页数等。
答案 2 :(得分:0)
首先,Book必须扩展SaleItem。
实例化适当的SaleItem最简单的方法是在上面的ifs语句中: 如果itemNum == 1 item = new Book()与params。 其他人一样。
为什么要在Cart中保留对特定书籍,词典和cd的引用?我看到的唯一用途是你试图计算购物车中的书籍数量。如果这就是你的意思,那不是那样的。您应该迭代items数组并计算书籍实例
答案 3 :(得分:-1)
“第五个输入参数给出了项目的类型(1本书,2个词典,3个AudioCD)。根据要添加的项目的类型,该方法向用户询问剩余实例变量的值。” / p>
你不应该创建一个新的SaleItem
,你应该采取第五个输入来确定你应该实例化哪种SaleItem
并添加到购物车。
您的代码SaleItem item = new SaleItem(code,title,price,quantity,itemNum);
无论如何都是错误的。
您的SaleItem
构造函数为public SaleItem(int code, String title, double price, int quantity)
,因此您甚至无法传递正确数量的参数。