我正在尝试编写一个程序来模仿我的CS类自动售货机的操作。我有一个双阵列股票,代表特定“槽”的项目数量[我的自动售货机很奇怪,有点像一个长的自动售货机有1列不同的项目]。到目前为止,这是我的代码:
public class VendingMachine
{
// define fields here
public static double itemPrice[];
public static String[] itemName;
public static int stock[][];
public static int maxPerSlot;
public static double cashAmmount;
public VendingMachine(int numslots, int maxperslot, double cash)
{
final int numSlots = numslots;
maxPerSlot = maxperslot;
cashAmmount = cash;
stock = new int[numSlots][0];
itemPrice = new double[numSlots];
itemName = new String[numSlots];
// complete this method
}
public void setProduct(int slot, String product, double price)
{ int Slot = slot;
itemPrice[slot] = price;
itemName[slot] = product;
stock[Slot][0] = 0;
//
}
public void restockProduct(String product, int quantity)
{
String Product = product;
int currentCapacity = quantity - maxPerSlot;
for(int i = 0; i < stock.length; i++){
if (itemName[i]==Product){
for(;quantity <= maxPerSlot && currentCapacity != 0; quantity--)
stock[i][0] += 1;
}
}
//Put # of products in slot that holds it and if that slot is full put the rest in the next
//availble slot that holds that product, if all full return error.
}
public double getCashOnHand()
{
return cashAmmount; // replace this line with your code
}
public int getQuantity(int slot)
{
return stock[slot][1]; // replace this line with your code
}
public int getQuantity(String product)
{ int total = 0;
for (int i = 0; i<itemName.length;i++){
if (product == itemName[i]){
total += stock[i][1];
}
}
return total;
}
public boolean buyItem(int slot)
{ int snum = slot;
if (stock[snum][1] != 0){
stock[snum][1]--;
return true;
} else {
return false;} // replace this line with your code
}
}
每次在线程“main”中运行runception时java.lang.ArrayIndexOutOfBoundsException:0 在VendingMachine.setProduct(VendingMachine.java:27) 在vmd.main(vmd.java:9)此代码虽然我收到此错误消息:
有人可以在这里向我解释为什么我会继续收到这个错误吗?我的意思是逻辑看起来很正确。
答案 0 :(得分:1)
你的问题在这里:
stock = new int[numSlots][0];
这定义了一个numSlot数组的数组,每个数组的长度为0。
答案 1 :(得分:1)
在构造函数中初始化股票时,请执行以下操作:
stock = new int[numSlots][1];
使用0代替1初始化长度为0的数组!
答案 2 :(得分:0)
您在stock
,
stock = new int[numSlots][0];
因此当您尝试访问索引为零的元素时会出现该异常。
stock[Slot][0] = 0;
答案 3 :(得分:0)
这一行
stock = new int[numSlots][0]; // <-- A length of zero? You want a one there.
应该是
stock = new int[numSlots][1]; // <-- like so. Or, if you really don't
// want to change your other code make it a 2.
// But you'll leave memory unused, and you really should change it.
其他地方(你有这样的代码) -
stock[slot][1] // <-- stock[INDEX][1] <--- should be 0.
喜欢这个
stock[slot][0] // <-- all of the other accesses.
答案 4 :(得分:0)
因为这一行:
stock = new int[numSlots][0];
将stock
分配为数组数组,并且每个数组的长度都为0.因此,您无法将任何内容分配给这些数组(它们没有任何要分配的元素)。所以当你这样做时:
stock[Slot][0] = 0;
您将获得ArrayIndexOutOfBounds
。请记住,在Java中,索引从0开始,所以如果你想要一个索引从0到N的数组,你必须分配大小为N + 1的数组。