Java 无限while循环,带infle(hasNext())
我几乎完成了我的程序,但它确实有一些错误,我不知道为什么会有。第一个我没能解决的问题是,这个程序将在最后一个while循环中运行到无穷远,而它本不应该运行。它正在读取一个文件,该文件有一个固定的结尾。。。有什么建议吗Java 无限while循环,带infle(hasNext()),java,while-loop,infinite,Java,While Loop,Infinite,我几乎完成了我的程序,但它确实有一些错误,我不知道为什么会有。第一个我没能解决的问题是,这个程序将在最后一个while循环中运行到无穷远,而它本不应该运行。它正在读取一个文件,该文件有一个固定的结尾。。。有什么建议吗 import java.util.*; import java.io.*; class Oblig3C{ public static void main(String[]args){ OrdAnalyse oa = new OrdAnalyse(); S
import java.util.*;
import java.io.*;
class Oblig3C{
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.
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);
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();
}
//Deklarerer metoden som skal brukes i c:
try{
innfil=new Scanner(new File(filArgs));
ordParInn(innfil, antOrd, antUnikeOrd, ord);
}catch(Exception e){
e.printStackTrace();
}
}
//Denne metoden er i bunn og grunn hele B-oppgaven.
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.
//For aa faa mellomrom mellom innskrivingene, for ordens skyld.
double tiprosent=teller*10/100;
for(int i=0; i<ord.length; i++){
if(antall[i]>tiprosent){
utfil.println("Vanlige ord: "+ord[i]+"\t("+antall[i]+" forekomster)");
}
}
}
import java.util.*;
导入java.io.*;
第三类{
公共静态void main(字符串[]args){
OrdAnalysis oa=新的OrdAnalysis();
字符串filArgs=args[0];
oa.分析电极(filArgs);
}
}
课堂秩序分析{
void分析方法(字符串filArgs){
//Begynner med A opprette Aller variabler som trengs,deklareres rett下。De ligger她在jeg skal的裸体超过了De。
扫描仪输入,innfil;
字符串[]ord;
int[]安塔尔;
安图尼科德国际酒店;
印刷作家乌特菲尔;
布尔sjekk;
//德克拉雷尔·阿勒·博采特(alle bortsett fra de som har med fil aa gjore)是一位作家,他在一个尝试捕捉环(printwriter utfil og scanner innfil)中创作了这部作品。
输入=新扫描仪(System.in);
ord=新字符串[5000];
antall=新整数[5000];
antUnikeOrd=0;
安托德=0;
sjekk=真;
试一试{
innfil=新扫描仪(新文件(filArgs));
//Naa sjekker计划使用了om ordet som blir-med扫描仪,用于.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,用于Lopen ferdig Nest ord Lees。
while(innfil.hasNext()){
字符串ORDEST=innfil.next().toLowerCase();
sjekk=假;
for(int i=0;ihasNext()
和next()
可能会阻止等待输入。您的文件是什么样子的?您是否用一个非常小的文件尝试过您的程序?您的程序中是否有任何以前的异常?我注意到您以前打开过同一个文件。尽管您关闭了它,但并没有在finally块中关闭它(如果您使用的是java 7,请使用资源试用)。@Keppil它不是,因为while循环正在运行。但它从未退出:/n没有早期的异常,是的,我以前打开过它,但在阅读后关闭了它。
//Denne metoden er C-oppgaven.
void ordParInn(Scanner innfil, int antOrd, int antUnikeOrd, String[] ord){
int [][] ordParTelling=new int[5000][5000];
int sc1,sc2;
String forrigeOrd=" ";
sc1=0;
sc2=0;
System.out.println("Test2");
while(innfil.hasNext()){ //In this while-loop
String ordLest=innfil.next().toLowerCase();
for(int i=0; i<ord.length; i++){
if(!forrigeOrd.equals(" ")){
sc1=Arrays.asList(ord).indexOf(ordLest);
sc2=Arrays.asList(ord).indexOf(forrigeOrd);
System.out.print(i);
if(sc1>0 && sc2>0){
ordParTelling[sc2][sc1]++;
}
}
forrigeOrd=ordLest;
}
}
System.out.println("test");
int alice=Arrays.asList(ord).indexOf("alice");
for(int i=0; i<ord.length; i++){
if(ordParTelling[alice][i]>0){
System.out.println(ordParTelling[alice][i]);
System.out.println("\t" + ord[i] +
"\t" + Arrays.asList(ord).indexOf(antUnikeOrd));
}
}
}
}