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

时间:2015-11-12 02:34:29

标签: class processing indexoutofboundsexception

我正在尝试编写一个程序,其中将文本转换为十六进制,然后转换为十进制,然后转换为(R,G,B)格式。但是,在尝试合并select id, name, department, total from ( SELECT e.id, e.name, e.department, t.total, rank() over(partition by e.department order by t.total desc) as rnk FROM ( SELECT id, SUM(hours) AS total FROM hours GROUP BY id ) t JOIN employee e ON e.id = t.id ) t where rnk = 1 order by total desc 时,我会收到一个ClickableRectangle异常,该异常会随着ArrayIndexOutOfBounds的符号动态变化。

对我的问题/优化的任何想法?

rects

1 个答案:

答案 0 :(得分:1)

为了将来参考,您应该确切地告诉我们哪一行抛出异常,并且您应该包括重复该问题所需的所有代码。如果文字太长而无法发布,请将其缩小到较小的MCVE

但从我可以看到的情况来判断,问题似乎在这里:

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时,您访问charAt 0。
  • 当i = 0且j = 1时,您访问charAt 1。
  • 当i = 0且j = 2时,您可以访问charAt 2.
  • 当i = 3且j = 3时,您可以访问charAt 3.
  • 当i = 3且j = 4时,您可以访问charAt 4.

您还可以使用println()语句来更好地了解正在发生的事情:

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

打印出来:

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

最后一部分是问题 - 我使用的字符串是&#34; test&#34;,因此它只有4个字符:charAt(0)charAt(1),{{1 }和charAt(2)。所以当你尝试访问charAt(4)时,它会抛出一个StringIndexOutOfBoundsException!

我不确切地知道你在这里尝试做什么,但是你必须重新修改你的代码,以便它不会尝试访问超出界限的字符。字符串。

作为旁注:看起来您正试图一次性编写整个项目的代码。不要这样做。相反,以增量开发 - 尝试在将它们组合到整个项目之前让自己更小的工作。你能写一个单独的草图,只是循环遍历一个字符串并打印出你想要提取的字符吗?然后,如果您遇到问题,可以使用较小的草图作为MCVE,这样我们就可以更轻松地为您提供帮助。