1

问题是实现三个方法get(int index),set(intindex)和构造函数SelfGrowingArray(),以生成 main 方法中显示的语句。当它编译时,我得到一个ArrayIndexOutofBoundsException,特别是这个错误:

[null, null, null, null, null, null, null, null, null, null, null, null, null, null, You don't know you're beautiful]
[null, null, null, null, null, null, null, null, null, null, null, null, null, null, You don't know you're beautiful, null, null, null, null, null, null, What doesn't kill you makes you stronger.]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -14

这是我的代码,请帮助:

public class SelfGrowingArray {

private Object[] data;

public SelfGrowingArray()
{
    data = new Object[0];
}

public void set(int index, Object value)
{
    if (index >= data.length) {
        Object[] newArray = new Object[index + 1];
        for (int i = 0; i < data.length; i++) {
        newArray[i] = data[i];
        }
        data = newArray;
        }
        data[index] = value;    
}

public Object get(int index)
{
    if (index >= data.length)
    return null;
    return data[index];
}

public String toString()
{
    if (data == null)
    {
        return "null";
    }

    int iMax = data.length - 1;
    if (iMax == -1)
    {
        return "[]";
    }

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++)
    {
        b.append(data[i]);
        if (i == iMax)
        {
            return b.append(']').toString();
        }
        b.append(", ");
    }
}

public static void main(String[] args) {
    SelfGrowingArray myList = new SelfGrowingArray();
    myList.set(14, "You don't know you're beautiful");
    System.out.println(myList);

    myList.set(21, "What doesn't kill you makes you stronger.");
    System.out.println(myList);

    System.out.println("myList.get(-14) " + myList.get(-14));
    System.out.println("myList.get(14) " + myList.get(14));
    System.out.println("myList.get(15) " + myList.get(15));
    System.out.println("myList.get(31) " + myList.get(31));
    System.out.println("myList.get(32) " + myList.get(32));

}
}
4

2 回答 2

3

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:-14

问题在这里:

myList.get(-14)

您无法访问小于 0 的索引。修改您的get方法以支持负索引:

public Object get(int index) {
    if (index >= data.length || index < 0) {
        return null;
    }
    return data[index];
}
于 2013-04-29T03:53:02.333 回答
1

正如它所说,您在尝试从 get 方法中的索引 [-14] 检索值时遇到异常,您应该检查索引值是否不低于零。

public Object get(int index)
{
   if (index >= data.length || index < 0)
     return null;
   return data[index];
}
于 2013-04-29T03:56:38.117 回答