java - 无法将商品添加到购物车对象数组 (Java)

标签 java arrays class object

在我的 ShoppingCart 类中,我无法使用方法 add() 将订单添加到我的 newCart 对象数组中。 。相反,我收到以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at ShoppingCart.add(ShoppingCart.java:25)
        at ShoppingCart.main(ShoppingCart.java:99)

我想不出一种方法来评估元素是否已插入到我的数组中以及数组索引到底在哪里错误。
我应该声明新的 ShoppingCart add() 内的对象方法?目前,我正在使用 main() 来测试这些方法。

这是我的 IceCreamOrder 类:

import java.util.Scanner; //Used to read user input from keyboard
import java.text.DecimalFormat; //Used to format output of decimal values

public class IceCreamOrder 
{
//Private instance variable declarations
private String flavor;
private String vessel;
private String amount;
private double unitPrice;
private int quantity;

//Constructor declarations
public IceCreamOrder(String flavor, String vessel, String amount, double unitPrice, int quantity)
{
    this.flavor = flavor;
    this.vessel = vessel;
    this.amount = amount;
    this.unitPrice = unitPrice;
    this.quantity = quantity;
}

public IceCreamOrder(String flavor, String vessel, String amount, double unitPrice)
{
    this.flavor = flavor;
    this.vessel = vessel;
    this.amount = amount;
    this.unitPrice = unitPrice;
    this.quantity = 1;
}

public IceCreamOrder()
{
    this.flavor = "";
    this.vessel = "";
    this.amount = "";
    this.unitPrice = 0.0;
    this.quantity = 0;
}

//Calculates the total price of order
public double price()
{
    return quantity * unitPrice;
}

//Accessor method declarations
public String getFlavor()
{
    return flavor;
}

public String getVessel()
{
    return vessel;
}

public String getAmount()
{
    return amount;
}

public double getUnitPrice()
{
    return unitPrice;
}

public int getQuantity()
{
    return quantity;
}

//Mutator method declarations
public void setFlavor(String flavor)
{
    this.flavor = flavor;
}

public void setVessel(String vessel)
{
    this.vessel = vessel;
}

public void setAmount(String amount)
{
    this.amount = amount;
}

public void setUnitPrice(double unitPrice)
{
    this.unitPrice = unitPrice;
}

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

//toString method declaration
public String toString()
{
    DecimalFormat pattern0dot00 = new DecimalFormat("$0.00");

    return (((getQuantity() == 1) ? (getQuantity() + " order") : (getQuantity() + " orders")) + " of " + 
            getAmount() + " of " + getFlavor() + " ice cream in a " + getVessel() + " for " + 
            pattern0dot00.format(price()) + " = " + getQuantity() + " x " + getUnitPrice());
}

public static void main(String[] args) 
{       
    //Object declarations
    IceCreamOrder newOrder = new IceCreamOrder();
    Scanner keyboard = new Scanner(System.in);

    //Array declarations
    String[] flavorList = {"Avocado", "Banana", "Chocolate", "Hazelnut", "Lemon", "Mango", "Mocha", "Vanilla"};
    String[] vesselList = {"Cone", "Cup", "Sundae"};
    String[] amountList = {"Single Scoop", "Double Scoop", "Triple Scoop"};
    String[] quantityList = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"};

    System.out.println("Placing an order is as easy as ABC, and D.");
    System.out.println("Step A: Select your favorite flavour");
    String outputFlavor = "";
    for (int i = 1; i <= flavorList.length; i++)
    {
        outputFlavor = "    (" + i + ") " + flavorList[i-1];
        System.out.println(outputFlavor);
    }

    System.out.print("?-> Enter an option number: ");

    int inputFlavor = keyboard.nextInt();
    String flavorString = "";

    switch (inputFlavor)
    {
        case 1:
            flavorString = flavorList[0];
            break;
        case 2:
            flavorString = flavorList[1];
            break;
        case 3:
            flavorString = flavorList[2];
            break;
        case 4:
            flavorString = flavorList[3];
            break;
        case 5:
            flavorString = flavorList[4];
            break;
        case 6:
            flavorString = flavorList[5];
            break;
        case 7:
            flavorString = flavorList[6];
            break;
        case 8:
            flavorString = flavorList[7];
            break;              
    }

    newOrder.setFlavor(flavorString);
    System.out.println();

    System.out.println("Step B: Select a vessel for your ice cream:");
    String outputVessel = "";
    for (int i = 1; i <= vesselList.length; i++)
    {
        outputVessel = "   (" + i + ") " + vesselList[i-1];
        System.out.println(outputVessel);
    }

    System.out.print("?-> Enter an option number: ");

    int inputVessel = keyboard.nextInt();
    String vesselString = "";

    switch (inputVessel)
    {
        case 1:
            vesselString = vesselList[0];
            break;
        case 2:
            vesselString = vesselList[1];
            break;
        case 3:
            vesselString = vesselList[2];
            break;
    }

    newOrder.setVessel(vesselString);
    System.out.println();

    System.out.println("Step C: How much ice cream?");
    String outputAmount = "";
    for (int i = 1; i <= amountList.length; i++)
    {
        outputAmount = "   (" + i + ") " + amountList[i-1];
        System.out.println(outputAmount);
    }

    System.out.print("?-> Enter an option number: ");

    int inputAmount = keyboard.nextInt();
    String amountString = "";

    switch (inputAmount)
    {
        case 1:
            amountString = amountList[0];
            break;
        case 2:
            amountString = amountList[1];
            break;
        case 3:
            amountString = amountList[2];
            break;
    }

    newOrder.setAmount(amountString);
    System.out.println();

    System.out.println("Step D: How many orders of your current selection?");
    String outputQuantity = "";
    for (int i = 1; i <= quantityList.length; i++)
    {
        outputQuantity = "   (" + i + ") " + quantityList[i-1];
        System.out.println(outputQuantity);
    }

    System.out.print("?-> Enter how many orders: ");

    int inputQuantity = keyboard.nextInt();
    newOrder.setQuantity(inputQuantity);
    System.out.println();

    if (newOrder.getAmount() == amountList[0])
    {
        if (newOrder.getVessel() == vesselList[0])
        {
            newOrder.setUnitPrice(2.99);            
        }

        else if (newOrder.getVessel() == vesselList[1])
        {
            newOrder.setUnitPrice(3.49);
        }

        else
        {
            newOrder.setUnitPrice(4.25);
        }
    }

    else if (newOrder.getAmount() == amountList[1])
    {
        if (newOrder.getVessel() == vesselList[0])
        {
            newOrder.setUnitPrice(3.99);
        }

        else if (newOrder.getVessel() == vesselList[1])
        {
            newOrder.setUnitPrice(4.49);
        }

        else
        {
            newOrder.setUnitPrice(5.25);
        }
    }

    else
    {
        if (newOrder.getVessel() == vesselList[0])
        {
            newOrder.setUnitPrice(4.99);
        }

        else if (newOrder.getVessel() == vesselList[1])
        {
            newOrder.setUnitPrice(5.49);
        }

        else
        {
            newOrder.setUnitPrice(6.25);
        }
    }

    System.out.println(newOrder);
}
}

这是我的 ShoppingCart 类(class):

public class ShoppingCart 
{
private IceCreamOrder[] shoppingCart;
private int maxQuantity;
private int orderTracker;

//Constructor declarations
public ShoppingCart()
{
    this.shoppingCart = new IceCreamOrder[maxQuantity];
    this.maxQuantity = 5;
    this.orderTracker = 1;      
}

public void add(IceCreamOrder order)
{       
    if (orderTracker > maxQuantity)
    {
        System.out.println("Shopping cart is full.");
    }

    else 
    {
        shoppingCart[orderTracker - 1] = order;
        orderTracker++;
    }
}

//Method determines if shopping cart is empty
public boolean isEmpty()
{
    int orderCount = 0;

    for (int i = 0; i < shoppingCart.length; i++)
    {
        if (shoppingCart[i] != null)
        {
            orderCount++;
        }
    }

    return ((orderCount == 0) ? true : false);
}

//Method determines if shopping cart is full
public boolean isFull()
{
    int orderCount = 0;

    for (int i = 0; i < shoppingCart.length; i++)
    {
        if (shoppingCart[i] != null)
        {
            orderCount++;
        }
    }

    return ((orderCount == maxQuantity) ? true : false);
}   

public IceCreamOrder get(int position)
{
    return shoppingCart[position-1];
}

//Method determines the number of orders currently in shopping cart
public int size()
{
    int orderCount = 0;

    for (int i = 0; i < shoppingCart.length; i++)
    {
        if (shoppingCart[i] != null)
        {
            orderCount++;
        }
    }

    return orderCount;
}

public static void main(String[] args) 
{
    ShoppingCart newCart = new ShoppingCart();
    IceCreamOrder firstOrder = new IceCreamOrder("Vanilla", "Cone", "Single Scoop", 2.99);
    IceCreamOrder secondOrder = new IceCreamOrder("Vanilla", "Cone", "Single Scoop", 2.99);
    IceCreamOrder thirdOrder = new IceCreamOrder("Vanilla", "Cone", "Single Scoop", 2.99);
    IceCreamOrder fourthOrder = new IceCreamOrder("Vanilla", "Cone", "Single Scoop", 2.99);
    IceCreamOrder fifthOrder = new IceCreamOrder("Vanilla", "Cone", "Single Scoop", 2.99);
    //IceCreamOrder sixthOrder = new IceCreamOrder("Vanilla", "Cone", "Single Scoop", 2.99);

    newCart.add(firstOrder);
    newCart.add(secondOrder);
    newCart.add(thirdOrder);
    newCart.add(fourthOrder);
    newCart.add(fifthOrder);
    //newCart.add(sixthOrder);*/

    System.out.println(newCart.size());
    System.out.println(firstOrder);
    System.out.println(newCart.isEmpty());
    System.out.println(newCart.isFull());
}
}

最佳答案

问题出在这两行

this.shoppingCart = new IceCreamOrder[maxQuantity];
this.maxQuantity = 5;

初始化了导致异常的零长度的 shoppingCart 数组 你需要像这样改变它们的顺序

 this.maxQuantity = 5;
 this.shoppingCart = new IceCreamOrder[maxQuantity];

关于java - 无法将商品添加到购物车对象数组 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40962050/

相关文章:

java - 我们不能将 int 向下转型为 boolean 吗?

java - 使用代理服务时出现 Anypoint Mule Studio 3.5 : org. springframework.beans.NotWritablePropertyException

ruby - 如何将 .xml 文件转换为 ruby​​ 数组的实例?

java - 用菱形形式的数字填充二维数组

C# 构造函数 - 设置第二个属性

C# 嵌套类/结构可见性

java - Intellij 找不到 Tomcat9 的库

java - 如果我在没有源文件的情况下导出我的 jar,实际的 java 代码在哪里?

java - 如何修改我的方法以在 O(N) 或 O(N * log N) 中搜索然后删除重复项?

C# StreamWriter ,写入来自不同类的文件?