1

のある時点で存在する変数があるかどうかを調べようとしていますがArrayList、これを行う関数を2回呼び出すと、java.lang.IndexOutOfBoundsException. ただし、関数が 1 回だけ呼び出された場合、エラーは発生しませんが、関数を 2 回呼び出した場合、同じインデックスではなく、異なるインデックスが存在するかどうかがチェックされます。

コード;

//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));
4

1 に答える 1

0

このエラーは、index渡した の値get()がリスト内の要素数以上であることを示しています。例外を回避するには、次のようにコードを変更します。

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

一般に、このエラーは、インデックス スキームに何か問題があることを意味します。Java のリストおよび配列インデックスはゼロから始まりsize()-1、両端を含めて で終わります。渡す2と例外が発生するが、渡すこと1に問題がない場合、リストには at インデックス0と. の 2 つの要素しかありません1

于 2013-03-03T16:48:25.980 に答える