帮我看看这个java写的单词统计程序问题在哪(答到追加100分)

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:49:03
这是我写的程序。程序要读取文本文件,并统计文本文件中各个单词出现的次数。现在程序可以运行,但不能正确统计。
源文件内容如下
Word.java:
public class Word {
String word;
int count;
}

Count.java:
import java.io.*;
public class Count {
public static void main(String[] args) {
int i,flag,kk,h=-1;
String str="",str2="";
Word word=new Word();
Word words []=new Word[2000];
try{
BufferedInputStream ss=new BufferedInputStream(new FileInputStream("C:\\workspace\\单词统计\\dfs.txt"));
char ch;
while((kk=ss.read())!=-1){
ch=(char)kk;
if((kk<123)&&(kk>64)) str+=ch;
else
{
h++;
flag=0;
if(h!=0)
for(i=0;i<h;i++){
str2=words[i].word;
if(str2.equals(str)){
words[i].count++;
flag=1;
}
if(flag==1)break;
}
if(flag==0){
word.word=str;

你只生成了一个word的数组,但每次遇到新的单词,你没有生成Word,而是用原来的word的指针,指向的是同一个word,将代码改成下面这样就OK了。

public class Count {
public static void main(String[] args) {
int i, flag, kk, h = -1;
String str = "", str2 = "";
Word word = null;
Word words[] = new Word[2000];
try {
BufferedInputStream ss = new BufferedInputStream(
new FileInputStream("C:\\workspace\\单词统计\\dfs.txt"));
char ch;
while ((kk = ss.read()) != -1) {
ch = (char) kk;
if ((kk < 123) && (kk > 64))
str += ch;
else {
h++;
flag = 0;
if (h != 0)
for (i = 0; i < h; i++) {
str2 = words[i].word;
if (str2 != null && str2.equals(str)) {
words[i].count++;
h--;
flag = 1;
break;
}
}
if (flag == 0) {
word = new Word();<