Java调用函数两次时出现越界异常?

标签 java exception arraylist

我试图找出ArrayList中某个时刻是否存在一个变量,但是,当调用执行此操作的函数两次时,我得到一个java .lang.IndexOutOfBoundsException。但是,当该函数仅被调用一次时,它不会给出错误,尽管当调用该函数两次时,它们会检查是否存在不同的索引,而不是相同的索引。

代码;

//package mj.mjo.Vars;
public boolean varExists(int index){
    return mjo_vars.get(index) != null;
}

注意,这里的 mjo 是一个变量,vars 是另一个变量,即 mj.mjo.Vars 类

//package mj.play.StudioCanvas;
int nonsys = mjo.vars.setVar("TEST", "LOLOLOL", false); // returns 1
int yessys = mjo.vars.setVar("SYSVARTEST", "WOOHO!", true); // returns 2

System.out.println("DOES THE VAR \"TEST\" EXIST? " + mjo.vars.varExists(nonsys));
System.out.println("DOES THE VAR \"TEST\" EXIST? " + mjo.vars.varExists(yessys));

最佳答案

该错误表明您传递给 get()index 值大于或等于列表中的元素数量。按如下方式更改代码以避免异常:

public boolean varExists(int index){
    return index >= 0
        && index < mjo_vars.size()
        && mjo_vars.get(index) != null;
}

一般来说,该错误意味着您的索引方案有问题:Java 中的列表和数组索引从零开始,到 size()-1(含)结束。如果传递 2 会触发异常,但传递 1 就可以了,那么列表只有两个元素 - 索引 01 .

关于Java调用函数两次时出现越界异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187964/

相关文章:

java - Quickbooks 在线公司MetaData java

.net - 异常处理上下文切换和SEH

java - 根据Java/Grails中的元素从 map 中提取/过滤数据

java - 将值传递给 Java 中的外部方法

java - 使用 Endless RecyclerView 作为日历

java - 在异常详细信息中写什么?

.NET 文件加载异常

java - Array/ArrayList如何直接找到对象的索引?或者ArrayList如何知道对象存储在这个地方?

java - 为什么数组列表没有显示在回收器 View 中?

java - 不确定如何初始化一个新对象,该对象是 JAVA 中另一个对象的对象参数的副本