单词个数程序死循环,帮忙看看

来源:百度知道 编辑:UC知道 时间:2024/05/17 14:46:47
大家好
有一个程序,求一篇英语短文中各个单词的个数我写了一个程序,也求出来了,但却是个死循环,我调试了很久还不行
希望大家帮帮我,谢谢大家了

import java.io.*;
public class pinlv {

public pinlv() {
}
public static void main (String[] args)throws Exception {
FileInputStream in=new FileInputStream("English.txt");
byte[] buffer=new byte[512];
int a= in.read(buffer);
// String str=new String(b);
while(a!=-1){
for(int i=0;i<buffer.length-1;i++){
int count=1;
for(int j=i+1;j<buffer.length;j++){
if(buffer[i]==buffer[j]){
count++;
}
}
System.out.println(count);
}
}
}

}
这里提供一些英语素材(不要求去除空格,如果可以帮忙去除也可以,谢谢。将此素材保存到一个名文English.txt的记事本中,放在与java文档同目录的地方)
Consumers in Southern California will get the chance next summer to lease a fuel-cell car from

你那算法不对!它是从头到尾把每个单词在后面出现的次数打出来,好多重复了!
while(a!=-1)一直是真.

就是不用while语句,你这样也不是得到每个单词的个数,而是得到每个字母的个数

好麻烦的算法 个人感觉应该有更简单的 期待高手

你是要求每个单词在短文中出现的次数还是求短文中单词的总数啊 ??

一楼的你不会就不要瞎说,read()方法的作用:"下一个数据字节;如果已到达文件末尾,则返回 -1。"所以这个循环是绝对出的来的,死就死在"for(int i=0;i<buffer.length-1;i++)"这个里面.

我感觉也不是死了,只不过循环太多,2个for就至少做了512*511次,然后还要while...吐...

话说你这个代码从功能上看,只能得到字母的个数.
根本不需要循环,直接用在
FileInputStream in=new FileInputStream("English.txt"); 下面写个
System.out.println(in.available()); 就可以了
in.available()方法是io里面带的系统方法,返回int型,表示可以读取的字节数量.然后英文单词的一个char,正好是一个byte的长度,所以,直接用(已经测试通过)

给你个完整的例子,IO可是要学好的啊:
另外,需要try/catch就用,别搞个throws

import java.io.*;
public class pinlv {

public pinlv (){
}

public static void main(String[] args) {
FileInputStream in = null;
try {
in = new FileInputStream("English.txt&qu