2015-04-16 3 views
6

Ich habe in einer Textdatei mit ganzen Zahlen und Strings lesen, muß ich alle vier Stücke von Informationen verwenden, berechnen:Wie in einer Textdatei mit ganzen Zahlen und Strings zu einem Array

  1. Throughput
  2. Durchschn. Wartezeit
  3. Durchschn. Bearbeitungszeit
  4. CPU-Leerlaufzeit für ein Betriebssystem mit den Algorithmen "First Come First Serve" und "Shortest Remaining Time". (Auch sind die Seitenfehler als String eingelesen werden, sondern in der Textdatei wie folgt aussehen: „12, 7, 5, 79“)

Welche Art von Array soll ich tun verwenden dies und wie soll ich es umsetzen? Das ist der Teil, mit dem ich kämpfe.

Hier ist, was ich bisher:

import java.io.File; 
import java.util.Scanner; 

public class TextFile { 
    public static void main(String[] args) throws Exception { 
     Scanner input = new Scanner(new File("JobQueue.txt")); 

     String jobName; 
     int arrivalTime; 
     int cpuTime; 
     String pageFault; 

     while (input.hasNext()) { 
      jobName = input.next(); 
      arrivalTime = input.nextInt(); 
      cpuTime = input.nextInt(); 
      pageFault = input.next(); 

      System.out.printf("\n%s %d %d %s\n", jobName, arrivalTime, cpuTime, pageFault); 
     } 
    } 
} 

Bearbeiten auf 22.4:
Ausnahme:

java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at TextFile.main(TextFile.java:18) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

Hier ist der Code, den ich bisher gemacht habe:

import java.io.File; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class TextFile { 
    public static void main(String[] args) throws Exception { 
     Scanner input = new Scanner(new File("JobQueue.txt")); 
     ArrayList<DataObject> list = new ArrayList<DataObject>(); 

     while (input.hasNext()) { 
      String jobName = input.next(); 
      int arrival = input.nextInt(); 
      input.nextLine(); 
      int cpuTime = input.nextInt(); 
      input.nextLine(); 
      String inturrupt = input.next(); 

      DataObject data = new DataObject(jobName, arrivalTime, cpuTime, pageFault); 
      list.add(data); 
     } 
    } 
} 

Und:

public class DataObject { 
    private String jobName; 
    private int arrivalTime; 
    private int cpuTime; 
    private String pageFault; 

    public DataObject(String job, int arrival, int cpu, String interrupt) { 
     jobName = job; 
     arrivalTime = arrival; 
     cpuTime = cpu; 
     pageFault = interrupt; 
    } 

    public void setjobName(String job) { 
     jobName = job; 
    } 

    public String getJobName() { 
     return jobName; 
    } 

    public void setArrivalTime(int arrival) { 
     arrivalTime = arrival; 
    } 

    public int getArrivalTime() { 
     return arrivalTime; 
    } 

    public void setcpuTime(int cpu) { 
     cpuTime = cpu; 
    } 

    public int getcpuTime() { 
     return cpuTime; 
    } 

    public void setPageFault(String interrupt) { 
     pageFault = interrupt; 
    } 

    public String getPageFault() { 
     return pageFault; 
    } 

    public String toString() { 
     return String.format("\n%s %d %d %s\n", getJobName(), getArrivalTime(), getcpuTime(), getPageFault()); 
    } 
} 

EDIT # 2

import java.io.File; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.io.IOException; 

public class TextFile 
{ 
    public static void main(String[] args) throws IOException 
    { 
    Scanner input = new Scanner(new File("JobQueue.txt")); 

    ArrayList<DataObject> list = new ArrayList<DataObject>(); 

    while(input.hasNext()) 
    { 
    String jobName = input.next(); 
    int arrivalTime = input.nextInt(); 
    int cpuTime = input.nextInt(); 
    String pageFault = input.next(); 

    DataObject data = new DataObject(jobName, arrivalTime, cpuTime, pageFault); 
    list.add(data); 
    } 
    } 
} 

SAMPLE AUFT.WSCHLA:

J1 0 90 "7,27,73,86" 
J2 1 39 "12" 
J3 2 195 "11,31,73,94,120,134,183" 
J4 3 198 "7,25,57,83,112,138,190" 
J5 4 103 "11,26,58,94" 
J6 5 158 "15,39,63,79,120,144" 
J7 6 168 "9,46,66,84,125,147" 

Antwort

2

Die Datenbank ORM Stil Ansatz dazu wäre, eine Klasse zu erstellen, jede Zeile in der Datei darstellt:

public class RecordObject { 
    private String jobName; 
    private int arrivalTime; 
    private int cpuTime; 
    private String pageFault; 

    public RecordObject(String jobName, int arrivalTime, int cpuTime, String pageFault) { 
     this.jobName = jobName; 
     this.arrivalTime = arrivalTime; 
     this.cpuTime = cpuTime; 
     this.pageFault = pageFault; 
    } 

    // getters and setters 
} 

Dann erstellen Sie eine ArrayList zum Speichern einer beliebigen Anzahl von Zeilen aus Ihrer Datei:

ArrayList<RecordObject> list = new ArrayList<RecordObject>(); 

while(input.hasNext()) {   // <-- this is your original code 
    jobName = input.next(); 
    arrivalTime = input.nextInt(); 
    cpuTime = input.nextInt(); 
    pageFault = input.next(); 

    RecordObject record = new RecordObject(jobName, arrivalTime, cpuTime, pageFault); 
    list.add(record); 
} 

Sobald Sie die gesamte Datei zu Ende gelesen haben, können Sie über die ArrayList wie folgt durchlaufen:

for (RecordObject record : list) { 
    // compute throughput, average waiting time, etc... 
} 
+0

Es gibt 500 Arbeitsplätze in der Textdatei, sollte dies mit dem gut funktionieren viele Jobs in der Warteschlange richtig? Danke übrigens. – EchoJ

+0

Sie sollten keine Probleme bei der Verarbeitung von 500 Datensätzen haben, vorausgesetzt, Sie haben Ihre JVM-Heap-Größe nicht auf eine sehr kleine Zahl festgelegt. –

+0

Ich erhalte eine a inmismatchexception. Ich werde den Code, den ich jetzt zusammen mit dem Fehler zu meinem ursprünglichen Beitrag haben schreiben, habe ich versucht die Erforschung, was möglicherweise falsch sein könnte, aber kein Glück, könnten Sie mir noch einmal helfen? Vielen Dank. – EchoJ

1

Diese Adressierung ist, warum Sie eine Fehlermeldung erhalten. Versuchen Sie dies:

//main 
while (input.hasNext()) { 
    String jobName = input.next(); 
    int arrival = input.nextInt(); // assumes this is your arrivalTime 
    int cpuTime = input.nextInt(); 
    String inturrupt = input.next(); //assuming this is your pageFault 

    DataObject data = new DataObject(jobName, arrival, cpuTime, inturrupt); 
    list.add(data); 

    input.nextLine(); // advance input file to the next line 
} 

Dieser Code wird nur die Eingabedatei, wenn es die 4 Token in jeder Zeile gelesen hat. Es wäre auch hilfreich zu wissen, wie die Eingabedatei im Allgemeinen aussieht, wenn Ihre Probleme weiterhin bestehen.

+0

ich glaube nicht, das die 'java.util.InputMismatchException' lösen wird. –

+0

ich einige der Formatierungsänderungen vorgenommen Sie auf dem Laufenden und dann einige, ich werde meinen Code jetzt schreiben ... Ich bin nicht mehr die InputMismatchExcpetion empfangen, aber ich möchte nur sicherstellen, dass es richtig aussieht. Gibt es auch eine Möglichkeit, die .txt-Datei zu posten oder sollte ich nur einen Ausschnitt davon veröffentlichen? – EchoJ

+0

Schreiben Sie einfach ein Schnipsel, genug, damit wir die Idee bekommen. –

0

Ich glaube wirklich nicht, dass es irgendwelche Probleme mit dem Code geben würde, sehen Sie sich einfach die Eingaben aus der Textdatei an und wie sie mit next() und nextInt() übereinstimmen, um auf der sicheren Seite zu sein gehen, für BufferedReader readline() und führen Sie dann eine Linie geteilt

BufferedReader br=new BufferedReader(new FileReader("G:\\Codemagic\\sample01.txt")); 

    String current_line=null; 

    while((current_line=br.readLine())!=null) 
    { 
     current_line.split().do something with this 
    } 

auf diese Weise wissen Sie, was in jeder Kette gibt es []