2012-03-19 143 views
1

因此,为了获得数学课的额外荣誉,我正在编写一个程序来使pi可视化。每6位数字转换为十六进制颜色。但是,当我尝试缩放颜色时(因为r,g和b每个都有2位数,我只能达到99,而我想要达到255),所以遇到了一个错误。我经历了pi的几千位数,并在每组6中运行这个缩放函数,然后将它写入BufferedImage中的一个像素,但是我不断收到StringIndexOutOfBoundsException。当我尝试设置retArray [i + 1] = subArray [0]时,我得到了同样的错误,但是这次是在第5行。任何想法是怎么回事?在Pi中缩放RGB值

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; 
} 

非常感谢您对此问题的任何帮助。希望这是明显的,我没有看到。

+0

'subArray.length == 1'? – 2012-03-19 02:39:31

+0

我猜...它并没有什么意义,尽管它仍然运行良好,但只有大约100次迭代,而不是完全近10000次,并且在完成了一堆之后,它会得到错误。 – user1277591 2012-03-19 02:43:55

+0

ahhh我想我正在做点什么。当我只告诉它通过10套时,它并没有给我一个错误。然后我尝试在它处理的任何字符串中搜索数字0,但没有。我想如果我有像05这样的东西,它将用5代替它,并使得十六进制字符串的长度为1. – user1277591 2012-03-19 02:50:39

回答

1

问题出在Integer.toHexString()。

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