2015-04-16 12 views
6

mam przeczytać w pliku tekstowym z całkowitymi i smyczki, muszę korzystać ze wszystkich czterech części informacji do obliczenia:Jak czytać w pliku tekstowym z liczb całkowitych i ciągi do tablicy

  1. Przepustowość
  2. Średni czas oczekiwania:
  3. Średni czas realizacji
  4. Czas bezczynności procesora w systemie operacyjnym przy użyciu algorytmów procesora First Come First Serve i Shortest Remaining Remaining Time. (Również błędy stronie są odczytywane jako String ale wyglądać następująco w pliku tekstowym: „12, 7, 5, 79”)

Jakie tablicy należy użyć do zrobienia to i jak powinienem to wdrożyć? To jest ta część, z którą walczę.

Oto co mam do tej pory:

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

Edycja na 22/04:
Wyjątek:

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) 

Oto kod zrobiłem do tej pory:

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

I:

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

przykładowe zadanie kolejki:

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" 

Odpowiedz

2

Styl ORM podejście baza danych to byłoby utworzyć klasę reprezentującą każdy wiersz w pliku:

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 
} 

Następnie utwórz ArrayList, aby zapisać dowolną liczbę wierszy z pliku:

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

Po zakończeniu czytania całego pliku, można iteracyjne nad ArrayList tak:

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

tam 500 miejsc pracy w pliku tekstowym, to powinno działać w porządku z tym wiele zadań w kolejce, prawda? Dziękuję, btw. – EchoJ

+0

Powinieneś mieć problemy z obsługą 500 rekordów, zakładając, że nie ustawiłeś sterty JVM na bardzo małą liczbę. –

+0

Otrzymuję inputmismatcheception. Zamierzam opublikować kod, który mam teraz wraz z błędem do mojego oryginalnego posta, próbowałem dowiedzieć się, co może być nie tak, ale bez powodzenia, czy możesz mi pomóc? Dzięki. – EchoJ

1

to zajęcie dlatego otrzymujesz błąd. Wypróbuj to:

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

Ten kod przesuwa plik wejściowy dopiero po zakończeniu czytania 4 znaczników w każdym wierszu. Przydatnym byłoby również wiedzieć, jak ogólnie wygląda plik wejściowy, jeśli problemy nie ustępują.

+0

Nie sądzę, że rozwiąże to problem 'java.util.InputMismatchException'. –

+0

Zrobiłem niektóre z opublikowanych zmian formatowania, a następnie niektóre, mam zamiar opublikować mój kod teraz ... Nie otrzymuję już InputMismatchExcpetion, ale chcę tylko upewnić się, że wygląda poprawnie. Czy istnieje sposób na opublikowanie pliku .txt, czy powinienem opublikować jego fragment? – EchoJ

+0

wystarczy opublikować krótki opis, aby uzyskać ten pomysł. –

0

Naprawdę nie sądzę, że byłby jakiś problem z kodem, po prostu sprawdź dane wejściowe z pliku tekstowego i jak pasują do następnego() i nextInt(), aby być po bezpieczniejszej stronie przejdź do BufferedReader readline(), a następnie wykonaj linia podziału

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 
    } 

w ten sposób wiesz, co jest tam w każdym string []

Powiązane problemy