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
- Throughput
- Durchschn. Wartezeit
- Durchschn. Bearbeitungszeit
- 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"
Es gibt 500 Arbeitsplätze in der Textdatei, sollte dies mit dem gut funktionieren viele Jobs in der Warteschlange richtig? Danke übrigens. – EchoJ
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. –
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