1

そこで、数学の授業の単位を取得するために、円周率を視覚化するプログラムを書いています。6 桁ごとに 16 進数の色に変換されます。

ただし、色をスケーリングしようとするとエラーが発生します (r、g、b にそれぞれ 2 桁あるため、99 までしか移動できず、255 に移動したいため)。数千桁の pi を調べて、このスケール関数を 6 の各セットで実行し、それを BufferedImage のピクセルに書き込みますが、StringIndexOutOfBoundsException が発生し続けます。retArray[i+1] = subArray[0] を設定しようとすると、同じエラーが発生しますが、今回は 5 行目です。

    private String scale(int org){
    tmp = Integer.toString(org);
    retArray = new char[6];
    for(int i=0; i<=4; i+=2){
        tmpsub = tmp.substring(i, i+2);             //line 5
        int2 = Integer.parseInt(tmpsub);
        tmpint = (((float)(int2)/99)*255);
        intie = (int)(tmpint);
        tmpsub = Integer.toHexString(intie);
        subArray = tmpsub.toCharArray();
        retArray[i] = subArray[0];
        retArray[i+1] = subArray[1];      //String Index Exception on this line
    }
    retString = "";
    for(int i=0; i<retArray.length; i++)
        retString+=retArray[i];
    return retString;
}

この問題についてご協力いただきありがとうございます。うまくいけば、それは私には見えない明らかなものです。

4

1 に答える 1

1

問題は Integer.toHexString() にあります。

0x10 (10 進数で 16) 未満の値を指定すると、結果として長さ 1 の文字列が得られ、subArray[1] は例外をスローします。

于 2012-03-19T08:57:55.810 に答える