java和.length上的数组边界

java和.length上的数组边界,第1张

概述keys数组定义如下: keys = new char[] {resolv, 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н

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
总结

以上是内存溢出为你收集整理的java和.length上的数组边界全部内容,希望文章能够帮你解决java和.length上的数组边界所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1140353.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)