[求助]帮看看这个程序...

ShingU 2004-04-15 03:28:29
这个程序是用来统计输入的字符串中每个字母出现的次数,编译能通过,但是运行的时候就出错了,是下标越界,但是不是很清楚哪里的问题...

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
{
char inputChar = in.readChar();

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

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]);
}
}
}
}
...全文
46 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShingU 2004-04-15
  • 打赏
  • 举报
回复
谢谢各位,我先看看..:)
fivehun 2004-04-15
  • 打赏
  • 举报
回复
我找出错误了!
应该用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]);
}

}
}
}
casemy 2004-04-15
  • 打赏
  • 举报
回复
最好对输入进行下判断
kingfish 2004-04-15
  • 打赏
  • 举报
回复
既然统计字母就用
byte b = in.readByte();
如果b不在 [a-z][A-Z]范围里就continue;
fivehun 2004-04-15
  • 打赏
  • 举报
回复
我刚刚查看了jdk,
the next two bytes of this input stream as a Unicode character
看到readChar(),一次读出了两个字符,所以显示成为了汉字吧!
fivehun 2004-04-15
  • 打赏
  • 举报
回复
我试着输出了一下
System.out.println(inputChar);
得到的不是输入的字符,而是一些汉字,当然越界了,是不是不能使用DataInputStream来读字符呢?
wweijie 2004-04-15
  • 打赏
  • 举报
回复
我想问题应该在这里吧
frequencyTable[inputChar-'a'] = frequencyTable[inputChar-'a'] + 1;
你定义的frequencyTable是一个0到25的数组,如果输入的不是'a'-'z',比如大写'A'或者回车空格之类,inputChar-'a'不就越界了吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧