2017-05-01 1 views
-1

Ich arbeite an einer Java-Aufgabe für die Schule. Die Aufgabe besteht darin, mit zwei Dateien zu arbeiten, die die erste lesen, mit der zweiten, um Anpassungen an der ersten vorzunehmen und schließlich in einer neuen Datei auszugeben.Problem mit Schleife nicht das Ende einer Datei zu erreichen - Java

Scanner inputRecords = new Scanner(new File("Records.txt")); 
    Scanner inputTransactions = new Scanner(new File("Transactions.txt")); 
    BufferedWriter outputFile = (new BufferedWriter(new FileWriter("NewRecords.txt", true))); 
    char code; // transaction code 
    String lineTran = ""; 
    String lineRecord = ""; 
    String midS = ""; 
    String tidS = ""; 
    int tid = 0, mid= 0; 
    for (int x = 0; x < 6; x++) 
    { 
     lineTran = inputTransactions.nextLine();     
     code = lineTran.charAt(0); 
     System.out.println(code); 
     tidS = lineTran.substring(2,11);    
     tid = Integer.parseInt(tidS); 
     lineRecord = inputRecords.nextLine(); 
     midS = lineRecord.substring(0,9); 
     mid = Integer.parseInt(midS); 
     if (mid < tid) // add a new record lineTran.substring(2,lineTran.length() 
     { 
      outputFile.write(lineRecord); 
      outputFile.newLine(); 
      lineRecord = inputRecords.nextLine(); 
     } 
     else if (mid == tid) 
     { 
      if (code == 'C') //change record 
      { 
       outputFile.write(lineTran.substring(2,lineTran.length())); 
       outputFile.newLine(); 
       lineTran = inputTransactions.nextLine(); 
      } 
      else if (code == 'D') //delete record 
      { 
       lineTran = inputTransactions.nextLine(); 
       lineRecord = inputRecords.nextLine(); 
      } 
      else // add error 
      { 
       System.out.println(lineRecord + " Already Exists...add error"); 
       lineTran = inputTransactions.nextLine(); 
      } 
     } 
     else 
     { 
       if (code == 'A') // add record 
       { 
        outputFile.write(lineTran.substring(2,lineTran.length())); 
        outputFile.newLine(); 
        lineTran = inputTransactions.nextLine(); 
       } 
       else if (code == 'C') // change error 
       { 
        System.out.println(lineRecord + " Record already exist...Change Error"); 
        lineTran = inputTransactions.nextLine(); 
       } 
       else // delete error 
       { 
        System.out.println(lineRecord + " Record does not exist...delete error"); 
        lineTran = inputTransactions.nextLine(); 
       } 
     } 

beachten: Records.txt 10 Zeilen von Information hat (Beispiel: ######### Nachname Vorname Beruf) Transactions.txt 6 Zeilen Informationen (Beispiel: ‚A, D oder C '######### Nachname Vorname Beruf)

Das Problem, das ich habe, ist egal, die Art der Schleife, die ich laufen, ich erreiche eine von 2 Deadends. 1) im Fall der for-Schleife oben

D A C A C 386.326.383 dünner Kan Personal keine Änderungen gefunden ... ändern Fehler

Exception in thread "main" java. lang.StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs: 0 bei java.lang.String.charAt (unbekannte Quelle) bei fileHandling.main (fileHandling.java:26) ist das Ergebnis und nichts in die Datei geschrieben.

2) Wenn ich für Schleife durch x < laufen 5 Programm läuft gut und überspringt jedoch die letzte Transaktion.

Ich versuchte "Do While" und "While" Schleifen, aber nur ähnliche Ergebnisse. irgendwelche Vorschläge?

+0

Was ist unklar über * "StringIndexOutOfBoundsException: String Index außerhalb des Bereichs: 0" *? Sie haben leere Zeilen in Ihrer Datei und Ihr Code kann das nicht verarbeiten. – Tom

+0

nein, ich habe sichergestellt, dass die Datei sauber und richtig eingerichtet ist und ich bin mir sicher, dass es eine zusätzliche Zeile gibt, die die Schleife in beiden Fällen nicht erreicht. – Mark

Antwort

0

Auf der if Bedingung haben Sie zugewiesen lineTran = inputTransactions.nextLine(); dann oben auf for Schleife Sie wieder zuweisen. Bedeutet, dass Sie 1 Zeile jede Schleife ablehnen. Damit in der Transaktionsdatei 6 Zeilen stehen, führt die Schleife mehr als die Anzahl der Zeilen in der Datei aus, weil Sie .nextLine() mehr als die Anzahl der Zeilen gelesen haben.

+0

der Grund, warum ich die nextLine() habe; in beiden Spots ist, weil ich einen Teil der ersten Saite brauche, um die Schleife zu überprüfen. Ich werde versuchen, die Datei zu öffnen und die erste Ganzzahl zu bekommen, die ich brauche, und sehe, ob das funktioniert. – Mark

+0

Ich weiß, dass Sie 'lineTran' brauchen, um 'if'-Anweisungen einzutragen, aber warum müssen Sie den Wert von' lineTran' in 'nextLine()' am Ende der Bedingung ändern (** Sie haben es nicht benutzt **) dann geh wieder nach oben du gehst weiter um es nochmal zu ändern. Diese Zuordnung ist schädlich, Sie müssen 1 Zeile ablehnen. –

+0

Ich sehe, was Sie gerade sagen. weil ich es am Anfang der Schleife habe und in jedem Überprüfungszustand überspringe ich Zeilen, bevor ich sie benutze. Ich werde versuchen, die erste "nextLine()" außerhalb der Schleife zu verschieben. – Mark

Verwandte Themen