无限while循环,带infile(hasNext())

时间:2013-10-23 10:11:37

标签: java while-loop infinite

我差不多完成了我的程序,但确实有一些错误,我不知道为什么会这样。我无法解决的第一个问题是,这个程序将运行它的最后一个while循环到无穷大,当它不应该。它正在读取一个文件,该文件有一个固定的结尾...任何指针?

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)");
        }
    }
    }

这就是出现问题的地方:

    //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));
        }
    }
    }
}

0 个答案:

没有答案