Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 索引越界异常:无法确定发生了什么?学校作业_Java_Arrays_Arraylist_Indexoutofboundsexception - Fatal编程技术网

Java 索引越界异常:无法确定发生了什么?学校作业

Java 索引越界异常:无法确定发生了什么?学校作业,java,arrays,arraylist,indexoutofboundsexception,Java,Arrays,Arraylist,Indexoutofboundsexception,这是我第一次使用stackoverflow来回答我需要问的问题,希望能得到一些帮助。这是我正在做的一项学校作业,虽然我已经交了,而且很快就会对代码进行大幅度的修改,但我想先找出哪里出了问题。这基本上是一个采购历史记录程序,其中存储了过去的采购,可以通过“下一步”和“上一步”按钮作为收据访问。没有文件访问,所有数据都是随机生成的。随机数据生成不是作业的要求,但我想以此作为一种学习体验 关于这个问题,这个错误是怎么回事 Exception in thread "AWT-EventQueue-

这是我第一次使用stackoverflow来回答我需要问的问题,希望能得到一些帮助。这是我正在做的一项学校作业,虽然我已经交了,而且很快就会对代码进行大幅度的修改,但我想先找出哪里出了问题。这基本上是一个采购历史记录程序,其中存储了过去的采购,可以通过“下一步”和“上一步”按钮作为收据访问。没有文件访问,所有数据都是随机生成的。随机数据生成不是作业的要求,但我想以此作为一种学习体验

关于这个问题,这个错误是怎么回事

    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 9, Size: 9
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at farmmark.Storage.getItems(Storage.java:36)
at farmmark.Gui.buttonActionNext(Gui.java:415)
at farmmark.Gui$ButtonHandler.actionPerformed(Gui.java:632)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6290)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6055)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4653)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2482)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:607)
at java.awt.EventQueue$1.run(EventQueue.java:605)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:621)
at java.awt.EventQueue$2.run(EventQueue.java:619)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    BUILD SUCCESSFUL (total time: 6 seconds)
这里有很多代码,可能太多了,无法在这里发布,因此这里有一个指向源代码的链接:

以下是发生错误的代码点:

位于farmmark.Storage.getItems(Storage.java:36)

在farmmark.Gui.buttonActionNext(Gui.java:415)

在farmmark.Gui$ButtonHandler.actionPerformed处(Gui.java:631)


任何帮助都会很好,请记住,我用java编程才8周:p。高级版谢谢

您需要查看
farmmark.Gui$ButtonHandler.actionPerformed(Gui.java:632)
,并查看该值被传递到
Gui.buttonActionNext()
,因为该值被传递到
Storage.getItems()
,最终命名了一个大于列表大小(-1)的索引

列表中也可能没有要开始的项(
Storage.itemList
),在这种情况下,无论传递的值如何,都会出现此异常

at farmmark.Storage.getItems(Storage.java:36)
方法如下:

public static String[] getItems(int select)
{
    return itemList.get(select);
}
选择的值小于零或大于
(itemList.length-1)

在调试器中运行,在该行设置断点,然后查看发生了什么

我看不到itemList或select设置在哪里。我们也来看看这些方法


只是好奇-为什么这个方法是静态的?

好吧,看来你还有很多东西要学。 在尝试访问列表项之前,先包装一个小复选框,如下所示:

public static String[] getItems(int select)
{
    if (select < itemList.size()) {
        return itemList.get(select);
    } else {
        throw RuntimeException("We cannot access an item that does not exist");
    }
}
publicstaticstring[]getItems(int-select)
{
如果(选择

然后,尝试找出调用代码试图访问不存在的项的原因。阅读堆栈跟踪,它将准确地告诉您问题所在。

itemList.get(select)
是选择一些超出列表范围的索引。
select
的值是什么?您是否尝试过使用调试器检查您的程序?您提供的链接会弹出带有“病毒警报”消息的(假)弹出窗口…是的,我一直尝试调试它,但没有成功,在运行程序时,除非运行到某一行代码,否则无法在NetBeans中显示变量,这对我没有帮助。Louis-select的值将是计数器(收据编号),它表示假定生成的10种不同收据。您应该记住,数组从索引0开始,因此如果您有一个包含10个元素的数组,则对象1位于索引0,最后一个对象位于索引9。OBS:这只是一个学习练习。。。您不希望抛出这样的异常(否则,您不需要检查,只需让列表实现继续抛出IndexOutOfBoundsException即可)。。。但这只是简单地说明了问题:您无法访问等于或大于列表大小的索引,因为索引从0开始,以list.size()-1结束。祝你好运。谢谢,我试试看!我还没有尝试过异常处理。除了Gui类之外,我的大部分内容都是静态的,我想这就是我一直在编写代码并坚持使用它的方式。我本以为它是类成员;您的方式现在还可以。select的值一直作为我的数组中不存在的数字传递,正如您所说。我消除了一些不需要的数组和计数器,解决了这个问题。谢谢:)。
at farmmark.Storage.getItems(Storage.java:36)
public static String[] getItems(int select)
{
    return itemList.get(select);
}
public static String[] getItems(int select)
{
    if (select < itemList.size()) {
        return itemList.get(select);
    } else {
        throw RuntimeException("We cannot access an item that does not exist");
    }
}