ArrayIndexOutOfBoundsException/GUI
我正在研究从文件获取输入并将信息存储在数组中的程序。然后,有5种添加,删除,打印信息等方法。我还创建了嵌入式GUI类。每种方法都有一个按钮。ArrayIndexOutOfBoundsException/GUI
问题是,当我从文件中读取信息时,“addEntry”方法正常工作,但是当我尝试向数组中单独添加信息时,它会给出一个“ArrayIndexOutOfBoundsException”。这只发生在GUI中。如果我只是简单地调用主类中的方法,它就可以正常工作。这是我的添加方法:
public void addEntry(String sur, String init, String telEx) {
currentPlace++;
setSurname(sur);
setInitial(init);
setTelExt(telEx);
array[currentPlace] = (new Entry(getSurname(), getInitial(), getTelExt()));
}
变量currentPlace只是一个字段,其中存储了数组中最后一个元素的位置。 Entry是一个类,它包含两个构造函数(默认值和一个具有3个字段的值)和get/set方法。此外,如果我将currentPlace减1,它会起作用,但我失去了阵列的最后一个元素。
您在数组中分配的项目不足。 errormessage是一个非常明显的提示IMO。
Object[] o = new Object[2];
o[2] = x; <-- Index out of bounds
但我的数组的大小是100,我在23 ... – user2344158 2013-05-02 17:50:19
OOps!我意外地提出了以前的评论。 :(好的,展示代码来证明它是否在构造函数或构造函数本身中调用的函数内调用数组?为什么使用数组而不是List 例如? – Devolus 2013-05-02 18:01:08
这是从来没有盲目的东西对象到一个数组,而不必(在你的代码currentPlace
)某种对数组索引检查的一个好主意,以确保你不分配对象过去的数组的末尾就像上面的@Devolus所示。
这里的一个重要教训是数组是一个容器,它容纳了一个固定的元素数。如果您的程序需要大小的容器,那么您不应该使用数组,而应该使用Collections
类之一,如ArrayList
或Vector
,这些数字在添加项目时会自动增加。
谢谢,但规范在此阶段需要一个数组,因为数据库被下一个任务中的列表替换。 – user2344158 2013-05-02 18:00:50
使用debugger
来查看变量如何变化。把breakpoint
到该行:
array[currentPlace] = (new Entry(getSurname(), getInitial(), getTelExt()));
或。无论您在调用此方法,看看currentPlace
变化。
这是什么编程语言? – JJJ 2013-05-02 17:42:32
对不起,这是Java。 – user2344158 2013-05-02 17:44:06
您是否在将'Entry'对象添加到数组之前通过打印来检查'currentPlace'的值? – 2013-05-02 17:54:27