Class 为什么我会得到这个动态IndexOutOfBounds异常?

Class 为什么我会得到这个动态IndexOutOfBounds异常?,class,processing,indexoutofboundsexception,Class,Processing,Indexoutofboundsexception,我正在尝试编写一个程序,其中文本被转换为十六进制,然后转换为十进制,然后转换为(R,G,B)格式。但是,当尝试合并ClickableRectangle时,我得到一个ArrayIndexOutOfBounds异常,该异常会随着rects的符号动态变化 对我的问题/优化有什么想法吗 char[]颜色//要转换为十六进制的字符数组 字符串r=“”//颜色的红色值 字符串g=“”//颜色的绿色值 字符串b=“”//颜色的蓝色值 int x=0//矩形的X坐标 int y=0//矩形的Y坐标 int-q/

我正在尝试编写一个程序,其中文本被转换为十六进制,然后转换为十进制,然后转换为(R,G,B)格式。但是,当尝试合并
ClickableRectangle
时,我得到一个
ArrayIndexOutOfBounds
异常,该异常会随着
rects
的符号动态变化

对我的问题/优化有什么想法吗

char[]颜色//要转换为十六进制的字符数组
字符串r=“”//颜色的红色值
字符串g=“”//颜色的绿色值
字符串b=“”//颜色的蓝色值
int x=0//矩形的X坐标
int y=0//矩形的Y坐标
int-q//字符数
ClickableRectangle[]rects=新的ClickableRectangle[400*400]//矩形
无效设置(){
尺寸(显示宽度、显示高度);
}
无效设置(){
背景(0);
颜色=新字符[3];
字符串s=([在此处插入成绩单];//太长,无法发布//
对于(inti=0;i=宽度){
x=0;
y+=6;
}否则{
x+=6;
}
}
类可单击矩形{
int x=0;
int y=0;
字符串r=“”;
字符串g=“”;
字符串b=“”;
公共可点击矩形(整数x,整数y,字符串r,字符串g,字符串b){
这个.x=x;
这个。y=y;
这个。r=r;
这个.g=g;
这个.b=b;
}
公共空间显示(){
填充物(unhex(r)、unhex(g)、unhex(b));
rect(x,y,6,6);
}
公共void setRGB(字符串r、字符串g、字符串b){
这个。r=r;
这个.g=g;
这个.b=b;
}
公共字符串getValue(){
返回“+char(unhex(r))+char(unhex(g))+char(unhex(b));
}
公共布尔值isClicked(){
返回mouseX>x&&mouseY>y&&mouseX
为了将来的参考,您应该准确地告诉我们哪一行引发异常,并且应该包含重复该问题所需的所有代码。如果文本太长而无法发布,则将其缩小到较小的范围

但从我所看到的来看,问题似乎在这里:

String s = "test";
for (int i = 0; i < s.length(); i+=3) {     
  for (int j = i; j < i+3; j++) {       
    colors[j-i] = s.charAt(j);
  }
  //other stuff
}
打印出:

i: 0
j: 0
j: 1
j: 2
0
i: 3
j: 3
j: 4
最后一部分是问题所在-我使用的字符串是“test”,因此它只有4个字符:
charAt(0)
charAt(1)
charAt(2)
,和
charAt(3)
。因此,当您尝试访问charAt(4)时,它会抛出StringIndexOutOfBoundsException

我不知道您到底想在这里做什么,但是您必须重新编写代码,这样它就不会试图访问字符串边界以外的字符

作为旁注:看起来您正试图同时对整个项目进行编码。不要那样做。相反,以小的增量进行开发-在将较小的部分组合到整个项目中之前,尝试让它们自己工作。你能写一个单独的草图,简单地在字符串上循环并打印出你试图提取的字符吗?如果你被卡住了,你可以用那个小草图作为你的草图,我们会更容易帮助你

i: 0
j: 0
j: 1
j: 2
0
i: 3
j: 3
j: 4