0

ArrayIndexOutOfBoundsExceptionこの関数を呼び出すと取得されますが、常にではありません。10回の試行のうち、3回エラーが発生し、残りの7回は完全に機能しました.

void readTrainingData(Model m) throws FileNotFoundException  {

    BufferedReader br = null;

    try {
        br = new BufferedReader(new FileReader("training_data.csv"));
    } catch (IOException ex)    {
        throw new FileNotFoundException();
    }

    String line = "";
    int i = 0;
    int j;
    try {
        while((line = br.readLine()) != null)    {
            String[] coords = line.split(",");
            if (coords[0] != null && coords[1] != null) {
                m.x[i] = Float.parseFloat(coords[0]);
                m.y[i] = Float.parseFloat(coords[1]);
            }
            else    {
                System.out.println("Check training_data.csv");
            }

            j = 0;
            i++;
        }        
    } catch (IOException ex)    {
        System.out.println("Problem reading file");
        throw new RuntimeException(ex);
    }
}

エラーは次のとおりです。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at polygonprobability.Util.readTrainingData(Util.java:215)

デバッグしようとしてもエラーが発生しないため、デバッグできません。

私は完全に混乱しています。助けてください。

編集:条件をに変更しました

if (coords[0] != null && coords[1] != null && coords.length == 2)   {
         m.x[i] = Float.parseFloat(coords[0]);
     m.y[i] = Float.parseFloat(coords[1]);
}

215 行目はたまたま if 条件その​​ものです。

変更後もエラーが続きます。

4

5 に答える 5

2

この変更を行います

    if (coords.length == 2 && coords[0] != null && coords[1] != null )   {
             m.x[i] = Float.parseFloat(coords[0]);
         m.y[i] = Float.parseFloat(coords[1]);
    }
于 2013-07-29T11:58:28.490 に答える
1

この関数を呼び出すと Array IndexOutOfBoundsException が発生しますが、常にではありません。10回の試行のうち、3回エラーが発生し、残りの7回は完全に機能しました.

最初の潜在的な危険:

if (coords[0] != null && coords[1] != null) 

coordsここでは、配列には常に2要素があると想定しています。

条件を次のように変更します。

 // check for coords.length == 2 first inside the if 
 // if the first condition fails , others won't be evaluated for short circuit AND
 if ( coords.length == 2 && coords[0] != null && coords[1] != null)   {
     m.x[i] = Float.parseFloat(coords[0]);
     m.y[i] = Float.parseFloat(coords[1]);
}

2番 、

m.x[i] = Float.parseFloat(coords[0]);
m.y[i] = Float.parseFloat(coords[1]);

あなたのxand にyは、 によって評価されたインデックスが含まれていない可能性がありますi

Modelクラス、特に属性xy、それらをどのように初期化するかを示してください。

于 2013-07-29T11:50:00.070 に答える
1

IndexOutOfBoundsExceptionは、何らかの種類のインデックス (配列、文字列、ベクトルなど) が範囲外であることを示すためにスローされます。

あなたの場合、次のコード行が問題を引き起こしていると思いますが、

 String[] coords = line.split(",");

coords.lengthアクセスする前に、長さを確認する必要があります。

于 2013-07-29T11:50:58.517 に答える