因此,为了获得数学课的额外学分,我正在编写一个可视化pi的程序。每6位转换为十六进制颜色。

但是,当我尝试缩放颜色时遇到错误(因为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;
}


非常感谢您对这个问题的帮助。希望这是显而易见的,我看不到。

最佳答案

问题在于Integer.toHexString()。

如果给它一个小于0x10的值(十进制为16),结果将得到一个长度为1的字符串,然后subArray [1]将引发异常。

09-04 02:49