java - 如何修复索引越界错误?

标签 java arrays list indexoutofboundsexception stringbuilder

已修复:

我删除了 while 循环并添加了

 if (num.contains(count) == true) {
                freq = Collections.frequency(num, count);

                for (int k = 0; k < freq; k++) {
                    sb.append(temp);
                }
            }

我正在尝试向单词添加随机(0-8 之间)额外的字母副本。例如... does 可以变成 dddooees 或 doeess。

我的函数有时可以工作,但总是因索引越界错误而崩溃。

我假设我需要在某个时候检查 ArrayList 是否有 NULL 值。我尝试用 和 if 包装 while 语句来检查它,但没有任何改进。有什么建议吗?

private static String addLetters(String word) {
        StringBuilder sb = new StringBuilder(word.length());
        String[] apart = word.split("");
        int rand = (int)(Math.random() * 8);
        int ran, goUp;
        int count = 0;

       List<Integer> num = new ArrayList<>();

        for (int i = 0; i < rand; i++) {
            ran = (int)(Math.random() * word.length());
            num.add(ran);
        }

        Collections.sort(num);

        for (int temp : num) {
            System.out.println(temp);
        }

        for (String temp: apart) {
            goUp = count;

            sb.append(temp);
            System.out.printf("String so far: %s\n", sb.toString());
            System.out.printf("OUTSIDE: count: %d, goUp: %d\n", count, goUp);

      /*
        Removed the while loop and added in the above code using collections, works as intended now.
      */
            while (count == num.get(goUp)) {
                System.out.printf("INSIDE: count: %d, goUp: %d\n", count, num.get(goUp));
                sb.append(temp);
                System.out.printf("String ADD extra: %s\n", sb.toString());
                goUp++;
            }
            count++;
        }
        return sb.toString();
    }

最佳答案

你的循环是在单词输入(大小)上,并且你在num(rand部分)上执行num.get(goUp)如果单词输入大小大于rand大小,你会遇到这个错误(第 41 行):

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:638)
    at java.util.ArrayList.get(ArrayList.java:414)
    at com.sgr.games.Stack.addLetters(Stack.java:41)
    at com.sgr.games.Stack.main(Stack.java:10)

L39    System.out.printf("OUTSIDE: count: %d, goUp: %d\n", count, goUp);
L40
L41    while (count == num.get(goUp)) {
L42       System.out.printf("INSIDE: count: %d, goUp: %d\n", count, num.get(goUp));

关于java - 如何修复索引越界错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181382/

相关文章:

java - Text.setText() 不更新文本,抛出 NullPointerException

Java - 如何在不暂停 GUI 中的 GIF 动画的情况下暂停代码?

c - 程序经过镜像功能后重印图像

c++ - 我的 LRU 有什么问题?我错误地使用了 std::deque 吗?

c# - 将对象转换为单元素列表的快速方法?

java - 导出 jar 时将 Javadoc 添加到 Eclipse 项目

java - 如何使用 Scanner 和 while 循环进行 JUnit 测试 void 方法

javascript - 要在 asp.net 中创建图形,我需要数组内部数组格式的数据

python - 使用 genfromtxt 创建具有空列的 numpy 数组

list - 插入键值对后增加搜索树中的值