【问题标题】:Index Out Of Bounds Exception Java Index: 3, Size: 3索引越界异常 Java 索引:3,大小:3
【发布时间】:2015-05-19 04:08:06
【问题描述】:

大家好,在制作文字益智游戏时,我在仔细检查垂直和水平方向是否都是我当前保存到数组列表的文件中的单词时遇到了问题。

 String letterSize = "" + size;
    makeLetterWordList(letterSize);
    boolean finished = false;
    while ( !finished ) {
        finished = true;
        for (int i = 0; i < size; i++) {
            int randomYWord = randomInteger(wordList.size());
            String item = wordList.get(randomYWord);
            puzzleListY.add(item);
        }
        for (int i = 0; i <= puzzleListY.size(); i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j <= puzzleListY.size(); j++) {
                sb.append(puzzleListY.get(j).charAt(j));
            }
            randomXWord = sb.toString();
            if (!wordList.contains(randomXWord)) {
                finished = false;
                break;
            } else {
                puzzleListX.add(randomXWord);
            }

        }
    }

产生的错误如下:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:653)

我正在努力寻找代码中的错误,谁能帮助我?

【问题讨论】:

  • 错误中提到您的班级的第一行是什么?
  • 一个大小为 3 的数组有索引 0、1、2.. 找出你的代码为什么试图访问不存在的索引 3。这是一个编码错误;这是一个单独的开发人员任务.. 使用调试器(或铅笔和纸)可能有助于跟踪程序。

标签: java arrays for-loop while-loop stringbuilder


【解决方案1】:

循环应该只到大小 - 1

for (int i = 0; i <= puzzleListY.size(); i++) { // remove =

对于其他循环也是如此,因为你从索引 0 开始并且有 n 个元素循环应该是从 0 到 n-1

【讨论】:

  • 与内循环相同(使用j)。
  • @TedHopp 我仍然收到错误,但是如果运行它会产生错误,但有时它会正确运行。新错误 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3
  • 必须在这一行:sb.append(puzzleListY.get(j).charAt(j));? charAt(j) 引起了一些问题,你怎么确定索引 j 处有一个字符?
  • @JacksonPayne - 您是否将两个循环都更改为停止之前 puzzleListY.size()
  • @TedHopp 是正确的我已经修复了在 while 循环开始时清除 ArrayLists 所需的错误
猜你喜欢
  • 1970-01-01
  • 2018-11-19
  • 2013-03-30
  • 2017-08-04
  • 1970-01-01
  • 2013-03-05
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多