当前位置: 首页 > 知识库问答 >
问题:

如何修复越界索引错误?

马沛
2023-03-14

固定的:

我删除了while循环并添加了

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

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

我正在尝试向一个单词中随机添加一个额外的字母副本(介于0-8之间)。实例does可能会变成dooee或doess。

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

我假设我需要在某个时刻检查ArrayList中的空值。我试着用和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();
    }

共有2个答案

晁国发
2023-03-14

数组索引越界错误通常应该通过修复错误来处理。

你的逻辑太混乱了,我不确定你的代码应该如何工作。然而,我确实看到了你的崩溃:

将num数组的用途与while语句的条件中使用的用途进行比较,如下所示。你显然是在用两种不同的方式。

百里沛
2023-03-14

你的循环在单词输入(大小)上,你在num(rand部分)上执行num.get(goUp)

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));
 类似资料:
  • 我犯的错误 我的密码 我试图将数组的最后5个元素存储在temp 2中。那我就换了。有更简单的方法吗?将数组的前五个元素与后五个元素切换?你会如何用for循环切换它们?

  • 所以基本上我应该做的是,我应该得到一个字符串的数组列表,用两个字符串填充它,然后比较它们。例如,如果一个字符串是“1,2,3,4”,第二个字符串是“7,6,2,8,1”,那么它应该打印出“1,2”,因为它打印出的数字相似。但我遇到了和arrayindexoutofbounds异常,我不知道如何修复它。此外,如果你有任何可能缩短此代码的提示,也请告诉我。我有一个习惯,让我的代码超长。

  • 我不明白为什么这个方法不起作用。它会编译,但会引发运行时错误。

  • 问题内容: 在我的游戏代码中,我尝试添加一张手牌。一旦我做完了,我的数组就超出了范围。一切看起来都不错,但也许我缺少了一些东西。 仅供参考,一个和两个是Player实例。来自Main类的相关代码(对格式感到抱歉。我很想将其传输到Stack Overflow): 卡类: 玩家等级: 问题答案: 问题出在你的循环上 没有其他任何值可设置,因此此循环不断循环,直到所有玩家拥有超过52张牌为止。一旦某人拥

  • 我一直在四处寻找是否有任何东西可以帮助我,但我不太了解人们的回答,任何我所了解的似乎都不能解决问题!所以基本上正如标题所说,我得到了一个数组索引越界异常,但我不知道为什么。非常感谢任何帮助。 代码:

  • 我正在为学校写一个充当收银机的程序。我要求输入项目的价格,并将它们播放到一个正在进行的ArrayList中,直到用户输入-1或0。0是在错误的情况下重新输入以前的价格,-1终止循环。 我得到了 我在Eclipse中运行Java11。 在不使用该方法的情况下,代码运行良好,因为我减少了计数器,并且在循环的下一次迭代中,无论是否删除了以前的数组位置,都将覆盖它。方法本身被设置为删除ArrayList.