Problem mit Schleife - Objektwert aendert sich nach erstellung

Status
Nicht offen für weitere Antworten.

scaary

Bekanntes Mitglied
Hallo.

Ich hab ein problem, und sehe einfach meinen Fehler nicht.

Ich habe ein kleines Programm fuer die Uni geschrieben, dass prinzipiell als mini Datenbank fungiert.

Dabei werden Stringcodes in der Form Name$Vorname$.... in einer Datei gespeichert. Diese soll dann ausgelesen werden, aus den einzelnen Datensaetzen von Leuten sollen dann Objekte Erstellt werden, die in einem Array zurueckgegeben werden.

Soweit so gut.

Mein problem ist, er macht das alles prinzipiell schon.

Solange ich nur einen Datensatz in der Datei drin hab, funktioniert alles einwandfrei.
Sind aber z.B. 2 Datensaetze in der Datei, werden die Daten, die ich im ersten Durchlauf erstellt habe, im zweiten Schleifendurchlauf einfach von den daten des Zweiten durchlaufs ersetzt, und ich nicht die leisetste ahnung warum... :(


Java:
	public static ApplicationData[] getApplicationDataFromIndexFile(String jobChoice, boolean isMaster) throws IOException {
		String tmpFileContent = FileWorker.getFileContent(new File(getIndexPathFromJobChoice(jobChoice, isMaster)));
		String[] fileContent = tmpFileContent.split("\\%\\%\\£\\£"); // Aufteilung einzelner Datensaetze
		//splitting the single application file Strings into applicationData and jobs
		ApplicationData[] result = new ApplicationData[fileContent.length];
		
		for (int i = 0; i < fileContent.length; ++i) {
			String[] reduceToSingleApplication = fileContent[i].split("\\£\\£"); // Aufteilung in Datensatz und Speicherpfad
			String application = reduceToSingleApplication[0]; // Speichern des Datensatzes
						

//Erstellung des Objekts
			ApplicationData applicationData = ApplicationWorker.createApplicationFromString(application);
				

// Einfuegen des Objekts in das result array
			result[i] = applicationData;
			
		}		
		return result;
	}

Ich mache hierbei nichts anderes, als den String, den ich von der Datei bekomme, nach einem bestimmten Schema aufzuteilen (das funktioniert einwandfrei, das hab ich getestet, daran kanns nicht liegen) und dann mit einer anderen Methode in einer anderen Klasse das Objekt zu erstellen ,dieses in das Array einzufuegen und zurueck zu geben.

Java:
	public static ApplicationData createApplicationFromString(String input) {
		ApplicationData applicationData = new ApplicationData();
		String[] fileContent = input.split("\\§");

		applicationData.setAnrede(fileContent[1]);
		applicationData.setName(fileContent[2]);
		applicationData.setVorname(fileContent[3]);
		applicationData.setStrasse(fileContent[4]);
		applicationData.setPlz(fileContent[5]);
		applicationData.setOrt(fileContent[6]);
		applicationData.setLand(fileContent[7]);
		applicationData.setGeburtsdatum(fileContent[8]); 
       return applicationData;

Der Fehler muss, meines Erachtens nach, hier liegen:

ApplicationData applicationData = ApplicationWorker.createApplicationFromString(application);


Denn wenn ich davor und dahinter ein System.out setzte, erhalte ich folgende Ausgabe:

vor
nach Elnaser
vor Elnaser
nach Elnaser2
vor Elnaser2
nach Elnaser3

Kann mir jemand sagen, wo mein dummer Fehler ist? Ich hab gestern echt 6 Stunden nur an dem bisschen ueberlegt und komme nicht auf die Loesung... :(

Danke!
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
Ich nehmen mal an du schreibst mit einem FileWriter in die Datei un benutzt das append nicht:
FileWriter(String fileName, boolean append)
Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.
 

Landei

Top Contributor
Sorry, da musst du das Datenformat etwas besser beschreiben.
Prinzipiell würde ich dir sehr dazu raten, auf ein bestehendes "vernünftiges" Format (XML, JSON) zu wechseln oder die Objekte serialisiert zu schreiben.
 

scaary

Bekanntes Mitglied
Also, Datei sieht ganz einfach so aus:
§Herr§Ruebe§Zahl§Eine Str 46§21073§Hamburg§WeitWegLand§13.06.1577££Speicherort%%££

Mehr ist es nicht, mehr steht nicht drin, is kein Format und nix. Auch alles nur String (Speicherort ist nur symbolisch).

Append?
Brauche ich das denn?

Mein FileWriter sieht so aus:

Java:
	/**
	 * Write text content in a file.
	 * @param file
	 * @param text
	 * @throws IOException
	 */
	public static void writeNewFileContent(File file, String text) throws IOException {
		if(file.exists()) {
			FileWriter output = new FileWriter(file)
                        output.write(text);
			output.close();
		} else {
			throw (new FileNotFoundException());
		}
	}

Aber kann das wirklich da dran liegen?

Die Datei wird eigentlich wo vollkommen anders erstellt und liegt in dem oben angegebenen Format vor.
 

Der Müde Joe

Top Contributor
FileWriter output = new FileWriter(file)
-->
FileWriter output = new FileWriter(file, true)

siehe anderen Post

(hab grad meine Glasskugel poliert ;-)

EDIT:
>Append?
>Brauche ich das denn?

Ja. sonst wird nicht appended sondern overwritten.
 

Landei

Top Contributor
Wie ARadauer schon sagt, so überschreibst du die vorhandene Datei. Woher soll Java auch wissen, wann du anhängen willst und wann nicht?
 

scaary

Bekanntes Mitglied
Das hat leider nichts geaendert, es wird mir trotzdem drei mal der zuletzt eingegebene Datensatz ausgegeben
(Zumal ich die Daten in der Datei von hand eingegeben habe, hier der Inhalt der Datei:

§Herr§Ruebe§Zahl§Eine Str 46§21073§Hamburg§WeitWegLand§13.06.1577££Speicherort%%££

§Herr§Ruebe2§Zahl2§Eine Str 46§21073§Hamburg§WeitWegLand§13.06.1577££Speicherort%%££

§Herr§Ruebe3§Zahl3§Eine Str 46§21073§Hamburg§WeitWegLand§13.06.1577££Speicherort%%££

Und raus bekomme ich nur den 3er datensatz... :(


Und ich arbeite ja zwischendrin nicht mit der Datei.

Die wird an einer ganz anderen Stelle erstellt.
Und hier wird sie wirklich nur ausgelesen (und das funktionier einwadfrei, das hab ich schon mehrmals getestet).

Es kann nicht an der erstellten Datei liegen.

Wie gesagt, vor der Anwendung der Methode
ApplicationData createApplicationFromString
Ist das Objekt mit dem ersten Datensatz noch vorhanden, nach der Anwendung sind zwei Objekte mit dem Datensatz des neuen Durchlaufs vorhanden... .
 
Zuletzt bearbeitet:

scaary

Bekanntes Mitglied
ich hole mir mit der Methode den derzeitigen INhalt:

Java:
	/**
	 * Get text content from a file.
	 * 
	 * @param file
	 * @return
	 * @throws IOException
	 */
	public static String getFileContent(File file) throws IOException {
		String result = "";
		String tmp = "";
		reader = new BufferedReader(new FileReader(file));
		do {
			tmp = reader.readLine();
			if (tmp != null) {
				result = result + tmp;
			}
		} while (tmp != null);
		reader.close();
		return result;
	}

Haeng das neue hinten dran, und schreibs wieder rein.

Aber wie bereits erwaehnt, die datei ist von Hand erstellt, es kann nicht am writer liegen!

Und ApplicationData ist wirklich nischt anderes, als eine Ansammlung von Strings und gettern / Settern.
Mehr ist da nicht drin.

Ich dachte, dass es vielleicht daran liegt, dass ich den Kram statisch erstelle, aber selbst wenn ich es in die Methode mit einfugee, geht nix:

Java:
	public static ApplicationData[] getApplicationDataFromIndexFile(String jobChoice, boolean isMaster) throws IOException {
		String tmpFileContent = FileWorker.getFileContent(new File(getIndexPathFromJobChoice(jobChoice, isMaster)));
		String[] fileContent2 = tmpFileContent.split("\\%\\%\\£\\£"); // Aufteilung einzelner Datensaetze
		//splitting the single application file Strings into applicationData and jobs
		ApplicationData[] result = new ApplicationData[fileContent2.length];
		
		for (int i = 0; i < fileContent2.length; ++i) {
			String[] reduceToSingleApplication = fileContent2[i].split("\\£\\£"); // Aufteilung in Datensatz und Speicherpfad
			String application = reduceToSingleApplication[0]; // Speichern des Datensatzes
				
                        System.out.println("VOR " + result[0].getName());
		
			ApplicationData applicationData = new ApplicationData();
			String[] fileContent = application.split("\\§");
 
			applicationData.setName(fileContent[2]);
			applicationData.setVorname(fileContent[3]);
			applicationData.setGeburtsdatum(fileContent[8]);
			
			result[i] = applicationData;
			System.out.println("NACH " + result[0].getName());
		}		
		return result;
	}

Meine Ausgabe ist nach wie vor:

VOR
NACH Ruebe
VOR Ruebe
NACH Ruebe2
VOR Ruebe2
NACH Ruebe3

Und das, owbohl ich immer das Objekt an arraystelle 0 ausgebe.
Sprich, er veraendert das Objekt, mit dem er gar nicht mehr abreiten sollte.

Auch wenn ich mir die Stellen, wo die objekte im Speicher sind ausgeben lasse, sind die 3 jedes mal identisch:
VOR null
NACH ApplicationWorker.ApplicationData@7ced01
VOR ApplicationWorker.ApplicationData@7ced01
NACH ApplicationWorker.ApplicationData@7ced01
VOR ApplicationWorker.ApplicationData@7ced01
NACH ApplicationWorker.ApplicationData@7ced01

Sprich:
Er schreibt mir auch kein neues Objekt in den Speicher, sondern veraendert das bestehende UND fuegt ein neues in das Array ein...
 
S

SlaterB

Gast
vielleicht greifen alle ApplicationData-Klassen (edit: -Objekte ;) ) auf die gleichen Variablen zu, weil diese z.B. statisch sind,
poste die ApplicationData-Klasse
oder gleich ein ganzes Testprogramm, ohne Dateien, stattdessen Dummy-Werte aus Strings (String-Arrays)
 
Zuletzt bearbeitet von einem Moderator:

scaary

Bekanntes Mitglied
OK, werde mich nachher kurz dran setzen und ne mini lauffaehige version schrieben!

OHO, uhm, die variablen von ApplicationData sind in der Tat statisch:

Java:
public class ApplicationData {

	public ApplicationData() {

	}

	private static String anrede = "";
	private static String name = "";
	private static String vorname = "";
	private static String strasse = "";
	private static String plz = "";
	private static String ort = "";
	private static String land = "";
	private static String geburtsdatum = "";


	public static void setAnrede(String anrede) {
		ApplicationData.anrede = anrede;
	}
	public static String getAnrede() {
		return anrede;
	}
	public static void setName(String name) {
		ApplicationData.name = name;
	}
	public static String getName() {
		return name;
	}
	public static void setVorname(String vorname) {
		ApplicationData.vorname = vorname;
	}
	public static String getVorname() {
		return vorname;
	}
	public static void setStrasse(String strasse) {
		ApplicationData.strasse = strasse;
	}
	public static String getStrasse() {
		return strasse;
	}
	public static void setPlz(String plz) {
		ApplicationData.plz = plz;
	}
	public static String getplz() {
		return plz;
	}
	public static void setOrt(String ort) {
		ApplicationData.ort = ort;
	}
	public static String getOrt() {
		return ort;
	}
	public static void setLand(String land) {
		ApplicationData.land = land;
	}
	public static String getLand() {
		return land;
	}
	public static void setGeburtsdatum(String geburtsdatum) {
		ApplicationData.geburtsdatum = geburtsdatum;
	}
	public static String getGeburtsdatum() {
		return geburtsdatum;
	}

Ist es das, was du meintest?

Aber wenn ich die nicht auf statisch setze maul eclipse wegen den gettern und settern rum, wie umgeh ich das denn?

Danke!
 

Der Müde Joe

Top Contributor
>Ist es das, was du meintest?

wenn du kein static mehr siehst und nur noch this.XXX = XXX
dann ist es wahrscheinlich ok

-->
static = immer das gleiche bei allen Objekten der Klasse
 

scaary

Bekanntes Mitglied
Ahh, dann koennte es in der tat daran liegen, dass die inneren variablen von ApplicationData auf static stehen.

Aber wie bekomm ich die denn von static weg?

Wenn ich es ohne static probiere, maul eclipse bei mir rum:

Description Resource Path Location Type
Cannot make a static reference to the non-static field anrede ApplicationData.java /GSTClientMASTER/src/ApplicationWorker line 371 Java Problem

Java:
private String anrede = "";

public static void setAnrede(String anrede) {
		this.anrede = anrede;
	}
	public static String getAnrede() {
		return this.anrede;
	}

?? :(
 
S

SlaterB

Gast
1. du hast gerade eine technische Handlung kennengelernt, 'static streichen'

2. du hast nun ein weiteres Problem mit static

3. dir fällt etwas auf?
 

scaary

Bekanntes Mitglied
Oh, uhm, a hab ich wieder was gelernt....

Vielen Dank!

@SlaterB
ich hatte schlicht und ergreifend uebersehen, dass die Methoden ebenfalls statisch sind, daher meine (im nachhinein) zusaetzliche dumme Frage.

Vielen lieben Dank,

Nachdem ich alle statisch weggemacht habe, geht es.
Mann,mannmann :)

Also, vielen lieben Dank euch allen!

LG scaary
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
J Schleife Problem Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S Doppel For Schleife mit Arrays - Problem bei der Ausgabe Java Basics - Anfänger-Themen 4
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
P Problem bei Fakultät mit "for"-Schleife Java Basics - Anfänger-Themen 12
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
S Problem mit for-Schleife Java Basics - Anfänger-Themen 4
D Problem mit Schleife / Newtonverfahren Java Basics - Anfänger-Themen 4
F Problem mit der While schleife und dem Scanner Java Basics - Anfänger-Themen 2
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
M For Schleife Problem Java Basics - Anfänger-Themen 2
S problem bei verschachtelter for-schleife Java Basics - Anfänger-Themen 5
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
F Problem mit for-Schleife Java Basics - Anfänger-Themen 4
L Nummern Generator (mit do-while Schleife) Problem Java Basics - Anfänger-Themen 7
B Problem mit for-Schleife Java Basics - Anfänger-Themen 4
C Problem mit Schleife Java Basics - Anfänger-Themen 3
Killerjo96 Erste Schritte Problem mit dem Sichern einer If Schleife Java Basics - Anfänger-Themen 5
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
K Problem mit der while - Schleife Java Basics - Anfänger-Themen 9
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
M Problem bei Schleife + Methode Java Basics - Anfänger-Themen 2
C Euler'sche Zahl berechnen, Problem bei for-schleife Java Basics - Anfänger-Themen 4
D For Schleife und DrawString - Problem Java Basics - Anfänger-Themen 20
G problem mit while schleife Java Basics - Anfänger-Themen 8
A For-Schleife Problem Java Basics - Anfänger-Themen 11
J Problem - Schleife Java Basics - Anfänger-Themen 16
V Problem mit einer While Schleife Java Basics - Anfänger-Themen 8
S Unverstandenes Problem mit for schleife Java Basics - Anfänger-Themen 2
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 Problem mit For-Schleife Java Basics - Anfänger-Themen 2
F Problem mit einer Schleife Java Basics - Anfänger-Themen 10
A Problem mit vereinfachter For-Schleife Java Basics - Anfänger-Themen 5
O Problem mit For-schleife Java Basics - Anfänger-Themen 3
O Methode - Problem mit Subtraktion in einer while-Schleife Java Basics - Anfänger-Themen 2
A Problem mit BigInteger und Schleife Java Basics - Anfänger-Themen 13
M Problem bei Schleife Java Basics - Anfänger-Themen 28
_SeiA_ Suche Schleife/Algorythmus für ein Problem Java Basics - Anfänger-Themen 3
J FOR-Schleife Problem Java Basics - Anfänger-Themen 10
M Problem mit der For Schleife (else funzt nicht richtig) Java Basics - Anfänger-Themen 10
G Problem mit If und integrierter Schleife Java Basics - Anfänger-Themen 2
ChackZz Problem mit for-Schleife bei der Primzahlberechnung Java Basics - Anfänger-Themen 8
J problem mit schleife Java Basics - Anfänger-Themen 31
M Problem bei Do. While schleife Java Basics - Anfänger-Themen 10
S problem mit "for" schleife Java Basics - Anfänger-Themen 12
X Anfänger Problem mit Schleife Java Basics - Anfänger-Themen 3
R Problem mit for-Schleife Java Basics - Anfänger-Themen 6
Z Problem mit Schleife und korrekter Ausgabe: Java Basics - Anfänger-Themen 13
N kleines Problem mit meiner Schleife Java Basics - Anfänger-Themen 8
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
megachucky GUI-Problem in Verbindung mit while-Schleife und Listener Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben