我有一个我正在处理的任务。我制作了两个数组,一个保存每个唯一单词,一个计算每个唯一单词的使用次数。现在我需要找到最高值的数组,即最常用的词,然后打印属于该类别的每个词:从那里开始使用前十个词。我做了一次尝试,但在找到最高价值部分时失败了。(如果有人可以给我一个关于如何让程序读取文本并保存不带逗号、斜杠等的单词的提示,请执行)
我不允许使用 HashMaps,对此感到抱歉。忘了提。
编码:
import java.util.*;
import java.io.*;
class Oblig3B{
public static void main(String[]args){
OrdAnalyse oa = new OrdAnalyse();
String filArgs=args[0];
oa.analyseMetode(filArgs);
}
}
class OrdAnalyse{
void analyseMetode(String filArgs){
//Begynner med aa opprette alle variabler som trengs, disse deklareres rett under. De ligger her oppe bare for at jeg skal ha oversikten over de.
Scanner input, innfil;
String[] ord;
int[] antall;
int antUnikeOrd, antOrd;
PrintWriter utfil;
boolean sjekk;
//Deklarerer alle bortsett fra de som har med fil aa gjore, disse deklareres inne i en try-catch-loop (printwriter utfil og scanner innfil).
input=new Scanner(System.in);
ord=new String[5000];
antall=new int[5000];
antUnikeOrd=0;
antOrd=0;
sjekk=true;
try{
innfil=new Scanner(new File(filArgs));
//Naa sjekker programmet om ordet som blir lest med Scanner-metoden er lest for. Er det slik, saa oeker den antallet i samme index i antall-arrayen med 1, den boolske verdien sjekk blir true, og neste if-lokke vil ikke kjore, for loopen er ferdig og neste ord leses.
//Here it reads the file, word by word.
while(innfil.hasNext()){
String ordLest=innfil.next().toLowerCase();
sjekk=false;
for(int i=0; i<ord.length; i++){
if(ordLest.equals(ord[i])){
antall[i]+=1;
sjekk=true;
}
}
if(!sjekk){
//Her vil lokken oke telleren antUnikeOrd med en for hvert unike ord som leses, og denne er alltid en
ord[antUnikeOrd]=ordLest;
antall[antUnikeOrd]++;
antUnikeOrd++;
}
antOrd++;
}
innfil.close();
}catch(Exception e){
e.printStackTrace();
}
try{
utfil=new PrintWriter(new File("Oppsummering.txt"));
utfil.println("Antall ord lest: " +antOrd+ " og antall unike ord: "+antUnikeOrd+" "+ ord.length);
finnOrd(antall, ord, utfil);
for(int i=0; i<ord.length; i++){
utfil.println(ord[i]+(" ")+antall[i]);
}
utfil.close();
}catch(Exception e){
e.printStackTrace();
}
}
//This is the method where I will find the top ten percent most used words.
void finnOrd(int[] antall, String[] ord, PrintWriter utfil){
int teller=1000;
for(int i=0; i<ord.length; i++){
if(antall[i]>teller){
teller=antall[i];
}
//Naa er teller lik den hoyeste verdien i antall-arrayen.
double tiprosent=teller*0.90;
System.out.println(tiprosent + " " + teller);
for(i=0; i<ord.length; i++){
if(antall[i]>tiprosent){
utfil.println("Vanlige ord: "+ord[i]+"\t("+antall[i]+" forekomster)");
}
}
}
}
}