Java 自增长数组

Java 自增长数组,java,arrays,Java,Arrays,问题是实现三种方法get(int index),set(intindex),以及构造函数SelfGrowingArray(),以便生成主方法中显示的句子。当它编译时,我得到了一个ArrayIndexOutofBoundsException,具体来说,这个错误是: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, You don't know you're beautiful]

问题是实现三种方法
get(int index)
set(intindex)
,以及构造函数
SelfGrowingArray()
,以便生成主方法中显示的句子。当它编译时,我得到了一个
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));

}
}
公共类自增长阵列{
私有对象[]数据;
公共自增长阵列()
{
数据=新对象[0];
}
公共无效集(整数索引、对象值)
{
如果(索引>=data.length){
Object[]newArray=新对象[index+1];
对于(int i=0;i=data.length)
返回null;
返回数据[索引];
}
公共字符串toString()
{
如果(数据==null)
{
返回“null”;
}
int iMax=data.length-1;
如果(iMax==-1)
{
返回“[]”;
}
StringBuilder b=新的StringBuilder();
b、 附加('[');
对于(int i=0;i++)
{
b、 附加(数据[i]);
如果(i==iMax)
{
返回b.append(']').toString();
}
b、 附加(“,”);
}
}
公共静态void main(字符串[]args){
自生长阵列myList=新的自生长阵列();
myList.set(14,“你不知道你很美”);
System.out.println(myList);
myList.set(21,“不杀你的东西会让你更强大。”);
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));
}
}
线程“main”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];
}
公共对象获取(int索引){
如果(索引>=data.length | |索引<0){
返回null;
}
返回数据[索引];
}
线程“main”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];
}
公共对象获取(int索引){
如果(索引>=data.length | |索引<0){
返回null;
}
返回数据[索引];
}

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

public Object get(int index)
{
   if (index >= data.length || index < 0)
     return null;
   return data[index];
}
公共对象获取(int索引)
{
如果(索引>=data.length | |索引<0)
返回null;
返回数据[索引];
}

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

public Object get(int index)
{
   if (index >= data.length || index < 0)
     return null;
   return data[index];
}
公共对象获取(int索引)
{
如果(索引>=data.length | |索引<0)
返回null;
返回数据[索引];
}

你试过使用调试器吗?你的
toString()
方法太可怕了!对于John3136,为了公平起见,我在问题中指定了我需要实现自己的方法。哇,我会严肃地质疑给你那种
toString
方法的人的能力。我的教授哈哈,大家都知道他把事情弄得过于复杂,无法测试我们的技能。你试过使用调试器吗?你的
toString()
方法太可怕了!对于John3136,为了公平起见,我在问题中指定了我需要实现自己的方法。哇,我会严肃地质疑给你那种
toString
方法的人的能力。我的教授哈哈,众所周知,他把事情弄得过于复杂,无法测试我们的能力skills@JimGarrison这段代码没有问题(我找不到)@JimGarrison这段代码没有问题(我找不到)这段代码如何“支持负索引”?也许他来自另一种语言,负索引从数组末尾开始计数?@JimGarrison对负索引的支持意味着在获取负索引时返回
null
,而不仅仅是让程序崩溃。这在哪里有文档记录?为什么一定要这样?@JimGarrison如果你不喜欢它,请发布一个答案并证明我们错了:)。你对想要什么做了一个可能不正确的假设。请看我在原帖上的问题。这是如何“支持负索引”的?也许他来自另一种语言,负索引从数组末尾开始计数?@JimGarrison对负索引的支持意味着在获取负索引时返回
null
,而不仅仅是让程序崩溃。这在哪里有文档记录?为什么一定要这样?@JimGarrison如果你不喜欢它,请发布一个答案并证明我们错了:)。你对想要什么做了一个可能不正确的假设。请看我的问题在原来的帖子上。