2013-04-29 64 views
1

问题是为了生成主要方法中显示的句子,需要执行get(int index),set(intindex),set(intindex)和构造函数SelfGrowingArray()这三种方法。虽然它编译,我得到一个ArrayIndexOutofBoundsException,具体地讲,这样的错误:自增长阵列java

[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)); 

} 
} 
+2

您是否尝试过使用调试器? – 2013-04-29 03:52:46

+0

您的'toString()'方法是可怕的! – John3136 2013-04-29 03:55:02

+0

对于John3136,为了公平地给予我们,我在这个问题中指定了我需要实现自己的方法。 – user2259570 2013-04-29 03:59:43

回答

3

Exception in thread "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]; 
} 
+1

这是如何“支持负面指标”?也许他来自一种不同的语言,负数指数是从数组末尾算起的? – 2013-04-29 04:01:46

+0

@JimGarrison支持否定索引*意味着当得到负指数时返回null,而不是让程序吹出来。 – 2013-04-29 04:02:20

+1

记录在哪里?为什么必须这样呢? – 2013-04-29 04:04:03

1

正如它说你尝试在get方法中从索引[-14]检索值时有一个异常,你应该检查索引值是否不低于零。

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

您是否阅读过代码? – 2013-04-29 04:00:34

+0

@JimGarrison这段代码没有问题(我找不到) – 2013-04-29 04:01:30