keys数组定义如下:
keys = new char[] {resolv,'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'};
‘resolv’是一个常量char值0x00,但这与此问题无关.
现在,这段代码有时会引发“java.lang.ArrayIndexOutOfBoundsException:length = 34; index = 34”异常:
protected void LoadKeyRects() {
keyRects = new Rect[keys.length];
// Solve key
keyRects[0] = resRect;
// Rest of keys
int x,y;
for (int i=1; i
到目前为止,我还没有能够自己重现错误,但我从第三方设备的BugSense获得了足够的报告来关注它.似乎有时keyRects [i]可能会引用keyRects [keys.length]尽管i
有任何想法吗?
最佳答案
我可以在for循环中看到问题.如果您没有访问字段本身,则使用超出范围的字段来结束迭代,这是完全错误的.如果你这样做,你应该采用不同的方式.两个例子:
protected void LoadKeyRects() {
keyRects = new Rect[keys.length];
// Solve key
keyRects[0] = resRect;
// Rest of keys
int x,y;
for (int i=1; i
这将正常工作,没有任何ArrayIndexOutOfBoundsException肯定.如果您需要访问甚至修改密钥数组,请执行以下操作:
protected void LoadKeyRects() {
final char[] localKeys = keys;
keyRects = new Rect[localKeys.length];
// Solve key
keyRects[0] = resRect;
// Rest of keys
int x,y;
for (int i=1; i