为什么我一直在为ArrayOutOfBounds提醒?

时间:2011-11-04 15:11:00

标签: java arrays exception

下面是我正在编写的课程的完整代码,但由于某种原因我不断获得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");     

4 个答案:

答案 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++)