ich eine Funktion in Java zu schreiben versuchen, das die nächste aufsteigend kehrt Sequenz (run) aus einer txt-Datei, sagen sie, der Rückgabetyp einer Funktion Arraylist sei.Get
Meine Beispieldatei input.txt enthält die nächsten Werte: 78123421. Also in Bezug auf Läufe bedeutet das, dass die Datei 4 Läufe hat: | 78 | 1234 | 2 | 1 |.
Was soll ich versuche, hier zu erreichen ist, wie wenn ich diese Funktion aus dem Haupt nennen würde() viermal sollte es so etwas wie
1.run: 78,
2.run: 1234,
3.run: 2,
4.run: 1
oder nur zwei Anrufe gedruckt werden sollen drucken
1.run: 78,
2.run: 1234
Ich habe versucht, mein Problem mit BufferedReader/FileReader und RandomAccessFile zu lösen, aber bisher keine funktionierende Lösung, bitte helfen:/
Also das ist, was ich bisher habe. Die Grundidee war, RandomAccessFile zu verwenden und von der Eingabe zu lesen, solange Laufbedingung erfüllt ist. Aber der Leser liest einen Wert mehr, deshalb verwende ich seek(), um beim nächsten Funktionsaufruf an der richtigen Stelle zu lesen. Es muss einen Fehler im Code geben, da nicht alle Läufe gedruckt werden oder nur eine Ausnahme ausgelöst wird.
import java.io.File;
import java.util.ArrayList;
import java.io.RandomAccessFile;
public class GetRunsFromFile
{
static long start = 0;
static long read_len = 0;
public static void main(String[] args) throws Exception
{
File in = new File("C:/Users/henrich/Desktop/Gimp.txt");
RandomAccessFile raf = new RandomAccessFile(in,"r");
ArrayList<Integer> current_run = new ArrayList<Integer>();
for(int i=1;i<=4;i++)
{
current_run = getNextRun(raf);
printArrayList(current_run);
}
raf.close();
}
private static ArrayList<Integer> getNextRun(RandomAccessFile raf) throws Exception
{
int v;
String line;
int val = Integer.MIN_VALUE;
ArrayList<Integer> run = new ArrayList<Integer>();
while((line=raf.readLine())!= null)
{
v = Integer.parseInt(line.trim());
if(v >= val)
{
read_len = raf.getFilePointer() - start;
start = raf.getFilePointer();
run.add(v);
val = v;
}
else
{
raf.seek(raf.getFilePointer() - read_len);
start = raf.getFilePointer();
return run;
}
}
return null;
}
private static void printArrayList(ArrayList<Integer> al)
{
for(int i=0; i<al.size(); i++)
{
System.out.print(al.get(i) + " ");
}
System.out.println();
System.out.println("------");
}
}
Für weitere Fragen lassen Sie es mich bitte wissen.
Hinweis: Es sollte nur für aufsteigende Läufe und Dateien beliebiger Länge funktionieren.
Danke für die Unterstützung.
Es wäre am besten, den Code zu zeigen, den Sie haben müssen, um herauszufinden, warum es Fehler gibt. – Makoto