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

索引越界错误。为什么?

濮阳和泰
2023-03-14

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

import java.util.*;
public class OinkerSpine 
{
    public ArrayList<String> pigLatin (String phrase)
    {
        phrase = phrase.replaceAll(".", " .");
        phrase = phrase.replaceAll(",", " ,");
        phrase = phrase.replaceAll("!", " !");
        //phrase = phrase.replaceAll("?", " ?");
        phrase = phrase.replaceAll("'", " '");

        String []words = phrase.split(" ");
        ArrayList <String> Endphrase = new ArrayList <String> ();
        final String AY = "ay";
        final String YAY = "-yay";

        String endword = "";

        for(int i=0; i < words.length; i++) 
        {
            String firstletter;
            String restofword;
            String secondletter;

            if (words[i].length() == 1)
            {
                firstletter = words[i];
                restofword = "";
            }
            else
            {
                firstletter = words[i].substring(0, 1);
                restofword = words[i].substring(1);
            }

            boolean firstIsUpper = (firstletter.equals(firstletter.toUpperCase()));

            if (firstIsUpper)
            {
                firstletter = firstletter.toLowerCase();
                secondletter = restofword.substring(0, 1);
                restofword = restofword.substring(1);

                secondletter = secondletter.toUpperCase();
                restofword = secondletter + restofword;
            }

            if (firstletter.equals("a") || firstletter.equals("e") ||
                firstletter.equals("i") || firstletter.equals("o") ||
                firstletter.equals("u"))
            {
                endword = firstletter + restofword + YAY;
            }

            else
            {
                endword = restofword + "-" + firstletter + AY;
            }

            endword = endword.replaceAll(" .", ".");
            endword = endword.replaceAll(" ,", ",");
            endword = endword.replaceAll(" !", "!");
            //endword = endword.replaceAll(" ?", "?");
            endword = endword.replaceAll(" '", "'");

            Endphrase.add(endword);
        }
        return Endphrase;
    }
}

共有1个答案

鲍宁
2023-03-14

如果restofwordword[i]是空字符串,将会发生什么

secondletter = restofword.substring(0, 1);

firstletter = words[i].substring(0, 1);
 类似资料:
  • 固定的: 我删除了while循环并添加了 我正在尝试向一个单词中随机添加一个额外的字母副本(介于0-8之间)。实例does可能会变成dooee或doess。 我的函数有时会工作,但总是会因越界索引错误而崩溃。 我假设我需要在某个时刻检查ArrayList中的空值。我试着用和if来包装我的while语句,以检查它,但没有任何改进。有什么建议吗?

  • 我编写了这段代码,将整个以10为基数的数字转换成二进制。我相信代码就是它所需要的一切,但我无法让工作。 我在这个网站和其他网站上花了几个小时,尝试了无数次的修改,但都没有用。 我已经让代码无错误地编译,但一旦我运行它并输入程序就会崩溃。 下面是代码: 这些是java在我输入数字时抛出的异常。 我希望这是足够的信息。

  • 我犯的错误 我的密码 我试图将数组的最后5个元素存储在temp 2中。那我就换了。有更简单的方法吗?将数组的前五个元素与后五个元素切换?你会如何用for循环切换它们?

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

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

  • CodeWars告诉我在第15行有一个索引出界错误。但是这是没有意义的,因为当我在IDE中测试它时,一切都可以完美地工作。