0
public class AssignmentChapter9
{
    public static void main(String[] args)
    {
        String words = Input.getString("Please enter a series of words with the spaces omitted.");
        String alphabet = "abcdefghijklmnopqrstuvwxyz";
        String inputWords = words.toLowerCase();
        int lcount[] = new int[26];
        char var1;
        char var2;

        for(int x = 0; x <= words.length(); x++)
        {
            var1 = words.charAt(x);

            for(int y = 0; y < 27; y++)
            {
                var2 = alphabet.charAt(y);

                if(var1 == var2)
                {
                    lcount[y] += 1;
                }

            }
        }

        for(int z = 0; z < 27; z++)
        {
            System.out.println("Letter " + alphabet.charAt(z + 1) + " count = " + lcount[z]);
        }
    }
}

我一直在尝试用java编写一个程序来确定字母表中每个字符在给定字符串中出现的次数。我能够成功编译程序,但是在用户输入完成后,它给出了一个越界异常。任何帮助,将不胜感激。

4

1 回答 1

0

在最后一个循环中,您从 0 迭代到 27 并且您尝试访问无法工作的索引z + 1,因为您的字母表只有 26 个索引 - 正确的是只有z。所以正确的代码是:

String alphabet = "abcdefghijklmnopqrstuvwxyz";
String inputWords = words.toLowerCase();
int lcount[] = new int[26];
char var1;
char var2;

for(int x = 0; x < words.length(); x++)
{
    var1 = words.charAt(x);
    for(int y = 0; y < alphabet.length(); y++)
    {
        var2 = alphabet.charAt(y);
        if(var1 == var2)
        {
            lcount[y] += 1;
        }
    }
}

for(int z = 0; z < alphabet.length(); z++)
{
    System.out.println("Letter " + alphabet.charAt(z) + " count = " + lcount[z]);
}

当您遍历数组或列表时,请使用 length 方法,不要使用常量!每当您使用例如!?+-扩展您的字母表时,您的代码将不再工作。length方法保护您的代码免受索引越界错误的影响。

您还可以使用for each循环结构节省一些代码行并让代码更具可读性:

String alphabet = "abcdefghijklmnopqrstuvwxyz";
int lcount[] = new int[26];

for (char character : words.toLowerCase().toCharArray())
{
    for(int y = 0; y < alphabet.length(); y++)
    {
        if(character == alphabet.charAt(y))
        {
            lcount[y] += 1;
        }
    }
}

for(int z = 0; z < alphabet.length(); z++)
{
    System.out.println("Letter " + alphabet.charAt(z) + " count = " + lcount[z]);
}
于 2013-07-15T20:44:24.360 回答