我想问题应该在这里吧
frequencyTable[inputChar-'a'] = frequencyTable[inputChar-'a'] + 1;
你定义的frequencyTable是一个0到25的数组,如果输入的不是'a'-'z',比如大写'A'或者回车空格之类,inputChar-'a'不就越界了吗?

解决方案 »

  1.   

    我试着输出了一下
    System.out.println(inputChar);
    得到的不是输入的字符,而是一些汉字,当然越界了,是不是不能使用DataInputStream来读字符呢?
      

  2.   

    我刚刚查看了jdk,
    the next two bytes of this input stream as a Unicode character
    看到readChar(),一次读出了两个字符,所以显示成为了汉字吧!
      

  3.   

    既然统计字母就用
    byte b = in.readByte();
    如果b不在 [a-z][A-Z]范围里就continue;
      

  4.   

    我找出错误了!
    应该用byte
    import java.io.*;public class CalculateFrequency
    {
    public static void main(String[] args) throws Exception
    {
    int[] frequencyTable = new int[26];

    for (int i=0;i<26;i++)
    {
    frequencyTable[i] = 0;
    }

    DataInputStream in = new DataInputStream(System.in);

    try
    {
    byte inputChar = in.readByte();

    while (inputChar != '.')
    {
    frequencyTable[inputChar-'a'] = frequencyTable[inputChar-'a'] + 1;
    inputChar = in.readByte();
    }


    in.close();
    }

    catch (IOException e)
    {
    System.out.println("输入字符有误");
    }

    for (int i=0;i<26;i++)
    {
    if (frequencyTable[i] != 0)
    {
    char c = (char)(97 + i);
    System.out.println("字母"+c+"出现次数: "+frequencyTable[i]);
    }

    }
    }
    }