2014-03-25 84 views
0

我正在写一个java程序,它将电话簿信息存储在一个数组中。每当我试图在这个数组中放入一些条目时,我会遇到OutOfBound异常。获取OutOfBound异常

private int size = 0; 
private Entry[] entryList = new Entry[size]; 

public ArrayDirectory(){ 

} 

@Override 
public void Add(String surName, String initials, int telNumber) { 

    entryList[size] = new Entry(surName, initials, telNumber); 
    size++; 


} 

    public static void main(String[] args){ 

    ArrayDirectory directory = new ArrayDirectory(); 

    directory.Add("Charles", "Johnson", 1234); 

    System.out.println(directory.entryList.length); 
} 

感谢您的关注

+0

数组一般都是静态的,您试图动态分配大小。正因为如此,我越来越outofboundexception。 – Shriram

+0

看看你的程序的前两行... –

回答

4

数组是固定大小。一旦你创建了一个他们可以容纳的元素的最大数量的集合。

private int size = 0; 
private Entry[] entryList = new Entry[size]; 

您可以创建一个大小为0的数组,这意味着可以在其中设置任何元素。

private int size = 5; 

将允许您使用索引最多5个要素的投入它:0,1,2,3,4

一个更好的解决办法是通过ArrayList使用动态数组。这会在添加更多元素时动态调整大小。

List<Entry> entryList = new ArrayList<Entry>(); 

entryList.add(new Entry()); 
+0

非常感谢你的队友,这是一个Uni作业,老师告诉我们使用数组而不是ArrayList。 – Bravo

2

数组不能动态扩展,如ArrayList。您初始化了一个大小为0的数组,这将永远不能容纳任何元素。

因此,要么使用动态增加大小的ArrayList,要么使用您希望/可能花费的最大空间量来初始化阵列。

0

在你的代码的最开始,你有这样的

private int size = 0; 
private Entry[] entryList = new Entry[size]; 

这意味着,你创建一个大小为0的数组,因此数组没有任何“细胞”,以及访问导致异常的任何值。