Guten Morgen,
ich habe eine Klasse Sequenzeinleser (unten stehtend). Die Klasse liest Zahlenfolgen (Sequzenzen) aus verschiedenen Textdateien und legt jede Sequenz in eine ArrayList. Diese Sequenzen werden wiederum in einer anderen ArrayList (Sequenzbehälter) abgelegt. Dabei gibt es für jede Sequenzlänge (geht von 2 bis 9) eine separate Textdatei und in einem Sequenzbehälter liegen wiederum nur Sequenzen einer bestimmten Länge. Die verschiedenen Sequenzbehälter werden in einer dritten ArrayList (sequenzbehaelterCollection) abglegt, diese List wird von der Methode zurückgegeben. Durch Konsolenausgaben habe ich herausgefunden, dass das Ablegen der Werte in den Sequenzen und das Ablegen der Sequenzen in den Sequenzbehältern einwandfrei funktioniert. Nur beim Ablegen der Sequenzbehälter in der sequenzbehaelterCollection geht schief. Unten stehend habe ich einen Auszug aus dem Inhalt einer solchen Collection nach Abschluss der Methode ausgeben lassen. Offenbar wird jedes mal wenn ein neuer Sequenzbehaelter angehängt wird, ein alter überschrieben. Das ist sonderbar, da ich doch mit add() arbeite. Es macht auch keinen Unterschied ob ich sequenzbehaelterCollection.add(j, sequenzbehaelter); oder sequenzbehaelterCollection.add(sequenzbehaelter); verwende. Bei dem Erstellen der Sequenzen und der Sequenzbehälter verwende ich die gleiche Methode - fehlerfrei.
ich habe eine Klasse Sequenzeinleser (unten stehtend). Die Klasse liest Zahlenfolgen (Sequzenzen) aus verschiedenen Textdateien und legt jede Sequenz in eine ArrayList. Diese Sequenzen werden wiederum in einer anderen ArrayList (Sequenzbehälter) abgelegt. Dabei gibt es für jede Sequenzlänge (geht von 2 bis 9) eine separate Textdatei und in einem Sequenzbehälter liegen wiederum nur Sequenzen einer bestimmten Länge. Die verschiedenen Sequenzbehälter werden in einer dritten ArrayList (sequenzbehaelterCollection) abglegt, diese List wird von der Methode zurückgegeben. Durch Konsolenausgaben habe ich herausgefunden, dass das Ablegen der Werte in den Sequenzen und das Ablegen der Sequenzen in den Sequenzbehältern einwandfrei funktioniert. Nur beim Ablegen der Sequenzbehälter in der sequenzbehaelterCollection geht schief. Unten stehend habe ich einen Auszug aus dem Inhalt einer solchen Collection nach Abschluss der Methode ausgeben lassen. Offenbar wird jedes mal wenn ein neuer Sequenzbehaelter angehängt wird, ein alter überschrieben. Das ist sonderbar, da ich doch mit add() arbeite. Es macht auch keinen Unterschied ob ich sequenzbehaelterCollection.add(j, sequenzbehaelter); oder sequenzbehaelterCollection.add(sequenzbehaelter); verwende. Bei dem Erstellen der Sequenzen und der Sequenzbehälter verwende ich die gleiche Methode - fehlerfrei.
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
public class Sequenzeinleser {
//Deklarationsteil
ArrayList<ArrayList<Integer>> sequenzbehaelter;
ArrayList<ArrayList<ArrayList<Integer>>> sequenzbehaelterCollection;
ArrayList<Integer> Sequenz;
//Konstruktor
public Sequenzeinleser() {
this.sequenzbehaelter=new ArrayList<ArrayList<Integer>>();
this.sequenzbehaelterCollection = new ArrayList<ArrayList<ArrayList<Integer>>>();
}
//Methode liest die Sequezen aus den verschiedenen Textdateien ein
public ArrayList<ArrayList<ArrayList<Integer>>> leseSequenzen() throws IOException {
//Initialisierungen
ArrayList<Integer> sequenz = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> x =new ArrayList<ArrayList<Integer>>() ;
ArrayList<ArrayList<Integer>> y =new ArrayList<ArrayList<Integer>>() ;
//die Indizes 0 und 1 von sequenzbehaelterCollection mit Schotter auffüllen
sequenzbehaelterCollection.add(0, x);
sequenzbehaelterCollection.add(1, y);
for (int j=2; j<10; j++) { //über alle Dateien iterieren
FileReader fr = new FileReader("C:/Dokumente und Einstellungen/Ralf/Desktop/Sequenzen/S"+j+".txt");
BufferedReader br = new BufferedReader(fr);
String zeile;
while (( zeile = br.readLine()) != null){ //über alle Zeilen (=en) einer Datei iterieren bis keine mehr da ist
int k =0;
String[] zahlen = zeile.split("\t");
// System.out.println("k"+k+" "+zahlen[0]);
// System.out.println("k"+k+" "+zahlen[1]);
sequenz = new ArrayList<Integer>();
int i =0;
while (Integer.parseInt(zahlen[i]) != 99){ //über alle Ziffern in einer Sequenz (in einer Zeile) iterieren;
sequenz.add(i, Integer.parseInt(zahlen[i]));
// System.out.println(sequenz.get(i)); da stimmt noch alles!
i++;
}
sequenzbehaelter.add(k, sequenz); //da stimmts auch noch!
//System.out.println(sequenzbehaelter.get(k));
k++;
}
sequenzbehaelterCollection.add(j, sequenzbehaelter);
System.out.println(j + ": " +sequenzbehaelterCollection); //da stimmts nicht mehr!!!
}
return sequenzbehaelterCollection;
2: [[], [], [[3, 4], [1, 2]]]
3: [[], [], [[4, 5, 6], [7, 2, 3], [3, 4], [1, 2]], [[4, 5, 6], [7, 2, 3], [3, 4], [1, 2]]]
4: [[], [], [[5, 6, 7, 8], [1, 2, 3, 4], [4, 5, 6], [7, 2, 3], [3, 4], [1, 2]], [[5, 6, 7, 8], [1, 2, 3, 4],