我正在编写一个程序,该程序确定两个单词是否是彼此的字谜。但是,我遇到以下错误,但我不完全确定为什么:



我仅包括此方法,而不包括整个程序,因为这是应该发生错误的方法。

public StringBuffer differentCharacters()
{
    StringBuffer difference = new StringBuffer();
    for (int i=0; i<StringBuffer1.length(); i++)
    {
        if(StringBuffer1.charAt(i) != StringBuffer2.charAt(i))
        {
            difference.append(StringBuffer1.charAt(i));
        }
    }
    return difference;
}

最佳答案

您正在获取StringIndexOutOfBoundsException,因为您正在使用非法索引调用StringBuffer2。原因如下:

通常,您得到3个StringBuffer:差异 StringBuffer1 StringBuffer2

说明:

StringBuffer difference= new StringBuffer();

在这里创建“结果” StringBuffer。现在让我们想象一下:
  • StringBuffer1 length是5
  • StringBuffer2 length是3

  • 执行:
    for (int i = 0; i < StringBuffer1.length(); i++)
    

    在此循环中,您将根据 StringBuffer1 的长度(5)进行迭代。所以这是发生了什么:

    我= 0
    if(StringBuffer1.charAt(0) != StringBuffer2.charAt(0))
    

    我= 1
    if(StringBuffer1.charAt(1) != StringBuffer2.charAt(1))
    

    我= 2
    if(StringBuffer1.charAt(2) != StringBuffer2.charAt(2))
    

    我= 3
    if(StringBuffer1.charAt(3) != StringBuffer2.charAt(3))
    

    在那里保留它!
    还记得 StringBuffer2 的长度等于3吗?这意味着以下内容:
    StringBuffer2.charAt(3) // 0 based index : 0-1-2-3 crash !!
    

    是非法的。因此,会抛出StringIndexOutOfBoundsException,并且执行失败。

    10-04 14:01