这个程序看似错误地读取文本文件的次数太多了

时间:2013-11-17 23:41:38

标签: java file java.util.scanner

我有一个程序应该从关于火车和轨道系统的文本文件中读取一组行。这些包括: 写入当前列车轨道的一条线 后续行中写入前一行所有站点的行。

程序必须读取这些,放入单独的哈希映射,然后再做一些其他的东西。我将需要每个line-object都有一个所有station-object的hasmap,并且每个station-object都有一个所有line-object(带有station-objects的hashmap)的hashmap。至。但是,当我在一个应该读取工作站而不是线路的部分用打印线对程序进行测试时,它看起来似乎没有。它重复相同的测试线很多次,我的终端无法向上滚动到没有更多它们的点。

请帮忙!

代码:

class Oblig5{

    public static void main(String[] args){

    Planlegger starten=new Planlegger();
    starten.lesFil();

    }
}

class Planlegger{

    Scanner input=new Scanner(System.in);

    void lesFil(){

        Linje linjer;
        Stasjon stasjoner;
        String linjeLest="";
        HashMap<String, Linje> linjerMap=new HashMap<String, Linje>();
        HashMap<String, Stasjon> stasjonerMap=new HashMap<String, Stasjon>();
        String aktuellLinje="";
        String linjeNummer="";
        char[] linjeNummerA;
        int linjeNummerInt=0;

        try{
            Scanner innFil=new Scanner(new File("Rutetabell.txt"));

            while(innFil.hasNext()){

                linjeLest=innFil.nextLine().toLowerCase();

                if(linjeLest.contains("linje")){
                    System.out.println("TESTISTASJON");
                    //Bruker en string for linjenummeret her for å lette bruken av nummeret som key i HashMapen. 

                    linjeNummerInt=Integer.parseInt(linjeLest.replaceAll("[\\D]", ""));
                    // linjeNummerA[0]=linjeLest.split("*linje* ").charAt(0);
                    // linjeNummer=linjeNummer[0];
                    linjer=new Linje(linjeNummer);
                    aktuellLinje=linjeNummer;
                    linjerMap.put(linjeNummer, linjer); 

                }else{
                    System.out.println("TESTISTASJON");
                    //Dersom ikke objektet finnes i hashmapen for stasjoner allerede, så lages objektet og lagres i HashMapen. 
                    if(!stasjonerMap.containsKey(linjeLest)){
                        stasjonerMap.put(linjeLest, new Stasjon(linjeLest));
                    }
                    //Her henter jeg ut objektet vi lager over, og om det ikke lages fordi det allerede eksisterer så hentes det ut uansett.
                    stasjoner=stasjonerMap.get(linjeLest);
                    //Her brukes objektinformasjonen over til å registrere stasjonen i objektet
                    linjer=linjerMap.get(aktuellLinje);
                    linjer.registrerStasjoner(linjeLest, stasjoner);
                    stasjoner.registrerNyLinje(aktuellLinje, linjer);
                }       
            }
            innFil.close();
        }catch(IOException e){
            e.printStackTrace();
        }
        System.out.println("Test");
        String sjekkHashmap=input.nextLine();
        if(stasjonerMap.containsKey(sjekkHashmap)){
            System.out.println("Det funker!");
        }
    }

    void beregnRuter(Stasjon fraSt, Stasjon tilSt){


    }

    void lesFraTil(){
    menySystem();
    }

    void menySystem(){
    System.out.println("Vennligst tast inn fra-stasjonen: ");
    String startStasjon=input.next().toLowerCase();
    // if(){
    // }

    }
}

class Linje{
    String linjeNummer="";
    HashMap<String, Stasjon> linjeStasjoner=new HashMap<String, Stasjon>();
    int antallStasjoner=0;    
    ArrayList<Stasjon> stasjonsList=new ArrayList<Stasjon>();

    Linje(String injeNummer){
    this.linjeNummer=linjeNummer;   
    }



    void registrerStasjoner(String linjeLest, Stasjon stasjon){
    linjeStasjoner.put(linjeLest, stasjon);
    stasjonsList.add(stasjon);
    antallStasjoner++;
    }

    boolean inneholder(Stasjon stasjon){
    boolean sannhetsSjekk=true;
    if(stasjonsList.contains(stasjon)){
        sannhetsSjekk=true;
        }else{
        sannhetsSjekk=false;
        }
    return sannhetsSjekk;
    }
}

class Stasjon{
    String stasjonNavn;
    Linje linje;
    HashMap <String, Linje> stasjonsLinjer=new HashMap<String, Linje>();
    ArrayList<Linje> linjeList=new ArrayList<Linje>();
    int teller=0;

    Stasjon(String linjeLest){
    stasjonNavn=linjeLest;
    }

    void registrerNyLinje(String aktuellLinje, Linje linje){
    stasjonsLinjer.put(aktuellLinje, linje);
    linjeList.add(linje);
    teller++;
    }
}

1 个答案:

答案 0 :(得分:0)

我看到了。我犯了一个愚蠢的错误,即将相同的printline写入if-else循环中的两种可能性。它似乎工作,但不知道其他一切是否有效。希望如此。如果您发现任何错误,请做出贡献。