程序说明:
我有我的这个程序,它旨在从文件(大文件)中读取每个单词,然后检查单词是否已经存在于保留唯一单词的单词数组中。如果不是,则将单词添加到数组的末尾,并将 +1 添加到 uniquewordcounter 以及同一索引处的计数数组。如果单词已经位于数组中的某个位置,它应该找到索引-数字,并在计数数组中的相同索引号上将值增加 1。当文件有更多内容时,它应该这样做。我也不允许使用 HashMaps。
但是,我的程序在读取文件时确实进入了无限循环,并且uniquewords 的计数很容易在眨眼间超过 100.000,但它应该最大为 5000...
这是代码:
class Oblig3A{
public static void main(String[]args){
OrdAnalyse oa = new OrdAnalyse();
String filArgs=args[0];
oa.analyseMetode(filArgs);
}
}
class OrdAnalyse{
void analyseMetode(String filArgs){
//Begins with naming all of the needed variables
Scanner input, innfil;
String[] ord, fortelling;
int[] antall;
int antUnikeOrd, totalSum;
PrintWriter utfil;
//Declaring most of them.
input=new Scanner(System.in);
ord=new String[5000];
antall=new int[5000];
antUnikeOrd=0;
totalSum=0;
try{
innfil=new Scanner(new File(filArgs));
//The problem is located here somewhere:
while(innfil.hasNext()){
fortelling=innfil.nextLine().toLowerCase().split(" ");
ord[0]=innfil.next().toLowerCase();
for(int i=0; i<fortelling.length; i++){
for(int j=0; j<5000; j++){
if(fortelling[i].equals(ord[j])){
antall[j]+=1;
System.out.print("heo");
}else{
ord[j]=fortelling[i];
antall[j]+=1;
antUnikeOrd+=1;
}
System.out.println(ord.length);
System.out.println(antUnikeOrd);
}
}
}
innfil.close();
}catch(Exception e){
e.printStackTrace();
}
// Here the program will write all the info acquired above into a file called Oppsummering.txt, which it will make.
try{
utfil=new PrintWriter(new File("Oppsummering.txt"));
for(int i=0; i<antall.length; i++){
totalSum+=antall[i];
}
utfil.println("Antall ord lest: " +totalSum+ " og antall unike ord: "+antUnikeOrd);
for(int i=0; i<ord.length; i++){
utfil.println(ord[i]+(" ")+antall[i]);
}
utfil.close();
}catch(Exception e){
e.printStackTrace();
}
}
}