下面是我正在编写的课程的完整代码,但由于某种原因我不断获得ArrayOutOfBoundsException
。有任何解释和更正吗?
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Random;
public class SuperMarket
{
private LoadInventory supplier;
private String[] supplierInventory;
private Item[] itemsInAisle;
private int numOfItemsInventory;
private int row;
public void superMarketEngine(String inventoryFile) {
supplier = new LoadInventory();
numOfItemsInventory = supplier.getNumItems();
row = supplier.findRowNumber();
supplierInventory = new String[row];
supplierInventory = supplier.loadInventory(inventoryFile);
itemsInAisle = new Item[row];
// Create an 'Item' object for each item, subsequently adding it to our
// inventory array
for (int i = 0; i <= row ; i++) {
String[] itemTokens = supplierInventory[i].split("\\s"); //keep getting out of bound
itemsInAisle[i] = new Item(itemTokens[0], Integer.parseInt(itemTokens[1]));
}
}
}
我从下一行继续获取ArrayOutOfBoundsException
:
String[] itemTokens = supplierInventory[i].split("\\s");
答案 0 :(得分:2)
删除for循环中的=(将i&lt; =行更改为i&lt; row),从零开始,但以长度结束。
答案 1 :(得分:1)
数组的最后一个值是supplierInventory [supplierInventory.length-1]。你应该改变
for (int i = 0; i <= row ; i++) {
到
for (int i = 0; i < row ; i++) {
所以数组new foobar [2]的值为0和1. foobar [2]将导致ArrayOutOfBoundException。
答案 2 :(得分:0)
将&lt; =更改为&lt;因为数组来自0 - &gt; array.length - 1
。
答案 3 :(得分:0)
数组supplierInventory的大小为 row 但您迭代行+ 1 值(介于0和行之间)。 当 i 获取值 row 时,将抛出ArrayIndexOutOfBoundsException。
要解决它,请像这样声明你的循环:
for (int i = 0; i < row; i++)
而不是:
for (int i = 0; i <= row; i++)