Methoden ArrayList Rückgabe bringt komische Werte

donmanolito

Mitglied
Hallo

Ich versuche gerade verschiedene Dateien einzulesen, sie zu splitten, dann in eine ArrayList mit eigener Klasse (String + int) einzutragen, sie dann zu verarbeiten und dann wieder in eine Datei auszugeben.

Im Moment hänge ich beim auslesen der ArrayList. Da kommen Werte raus die nichts mit dem zu tun haben was ich geaddet hab. Hier ein Beispiel:

usr.system.flags1, 1 // so sehen String, int direkt vor dem adden in die ArrayList aus
liste@15db9742 //so sieht die Zeile aus wenn ich sie aus der ArrayList wieder auslese.

Hier ist der Code:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;


public class verarbeiten {
	
	File dir = new File("c:/test/");
	File[] fileList = dir.listFiles();
	String[] Anz = dir.list();
	private int AnzDat = Anz.length;
	private int a=0;

	
	private int Wert;
	private String Name;

	public ArrayList<liste> upd = new ArrayList<liste>();

	public ArrayList<liste> getUpd() {
		return upd;
	}

	public void setUpd(ArrayList<liste> upd) {
		this.upd = upd;
	}
	
	public verarbeiten(String Name, int Wert){
		this.setWert(Wert);
		this.setName(Name);
		upd.add(new liste(Name, Wert));
		while(a != AnzDat){
			System.out.println("\n" + fileList[a]);
	        FileReader fr;
	        BufferedReader br;
	        try {
	            fr = new FileReader(fileList[a]);
	            br = new BufferedReader(fr);
	            
	            String zeile;
	            zeile = br.readLine();
	            while (zeile != null) {
	            	String[] Teil = zeile.split("=");
	            	
	            	String Teil1 = Teil[0];
	            	int Teil2 = Integer.parseInt(Teil[1]);     	
	                System.out.println(Teil1 + ", " + Teil2); //So sollte es aussehen!
	                upd.add(new liste(Teil1, Teil2));
	                System.out.println(upd.get(a)); //Ausgabe???
	                zeile = br.readLine();
	            }

	            fr.close();
	            a++;
	        }        
	        catch (IOException e){
	            System.out.println("Fehler beim Lesen der Datei " + fileList[a]);
	            System.out.println(e.toString());
	        }
		}

	

	}
	
	public int getWert() {
		return Wert;
	}

	public void setWert(int wert) {
		Wert = wert;
	}

	public String getName() {
		return Name;
	}
	
	public void setName(String name) {
		Name = name;
	}
		
}

Und hier der Code für die Klasse liste:

Java:
public class liste {

	private String Name;
	private int Wert;
	
	public liste(String Name, int Wert){
		this.Name = Name;
		this.Wert = Wert;
	}
	
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
	public int getWert() {
		return Wert;
	}
	public void setWert(int wert) {
		Wert = wert;
	}
		
}

Was mache ich falsch? bzw wie kann ich auf die einzelnen Strings bzw int in der ArrayList zugreifen?
 
Ich habe den Code nur überflogen. Aber die Werte werden schon richtig übernommen.
Dein Problem ist, dass die Default-Implementierung der toString Methode deiner Klasse „liste“ nicht den Inhalt des Objekts ausgibt.
Also implementiere/überschreibe als erstes die toString() Methode und schau dir dann das Ergebnis an.
 
du musst halt schon auf die einzelnen Attribute zugreifen.
Java:
liste li = new liste("test", 123);
//...
li.getName();
li.getWert();
 
Gib zum Beispiel folgende Methode zu Klasse liste dazu:
Java:
        public String toString() {
            return "Name = " + Name + "; Wert = " + Wert;
        }

"liste" ist übrigens kein guter Name für ein Element einer Liste.

Ok das liefert mir jetzt dann halt immer die ganze Liste zurück. Ein Attribut für den Aufruf lässt mir eclipse nicht zu. Wie schaffe ich es jetzt einen einzelnen String oder int aus Zeile x auszulesen, zu suchen oder zu ändern?

Ähmm ja ich bitte die Schlamperei zu verzeihen ;-) Ich hab schon seid der Schule nimmer programmiert was schon 20 Jahre her ist und hab erst letzte Woche mit Java angefangen.
 
Ok das liefert mir jetzt dann halt immer die ganze Liste zurück. Ein Attribut für den Aufruf lässt mir eclipse nicht zu. Wie schaffe ich es jetzt einen einzelnen String oder int aus Zeile x auszulesen, zu suchen oder zu ändern?
Nehmen wir die Zeile 52:
Java:
System.out.println(upd.get(a)); //Ausgabe???
Um hier nur den Namen anzuzeigen, ändere es so:
Java:
System.out.println(upd.get(a).getName());


Ähmm ja ich bitte die Schlamperei zu verzeihen ;-) Ich hab schon seid der Schule nimmer programmiert was schon 20 Jahre her ist und hab erst letzte Woche mit Java angefangen.
Es geht weniger um Schlamperei, sondern darum, dass du selbst mit den Begriffen durcheinander kommst. Eines der wichtigsten Sachen beim Programmieren ist es, gute Namen/Bezeichner zu wählen.
 
Zuletzt bearbeitet:
Danke, klappt!

Noch eine Frage:

Kann ich die ganze ArrayList nach einem String durchsuchen und mir die Zeile wo es gefunden wurde ausgeben lassen oder muss ich das mit ner Schleife Zeile für Zeile machen?
 
Ist dabei was zu beachten? Suche ich den Index eines Strings der in der ArrayList vorhanden ist, wird mir -1 zurück gelieft und auch mit contains bekomme ich false. Lasse ich mir die entsprechende Zeile ausgeben kommt aber der String nachdem ich gesucht habe:

Java:
		System.out.println(upd.contains("usr.system.flags2"));
		System.out.println(upd.indexOf("usr.system.flags2"));
		System.out.println(upd.get(2).getName());

false
-1
usr.system.flags2
 
Achja du hast eigene Listenelemente, dann musst du drüber iterieren. Sorry my bad.

Java:
public int getFirstIndex(String str) {
  for(int i = 0; i < upd.size(); i++) {
    liste l = upd.get(i);
    if(str == null ? str == l.getName() : str.equals(l.getName()) {
      return i;
    }
  }
  return -1;
}
 
Muss ich das jetzt als eigene Klasse machen oder wie integriere ich das jetzt in meine Klasse liste?

/edit: Ähmm sorry... War grad kurzzeitig nicht bei Sinnen oder so... Ist schon klar wies geht ;-)
 
Zuletzt bearbeitet:

Zurück
Oben