Variablen Array-Variable verändert sich

Nemesys88

Bekanntes Mitglied
Guten Tag!

Ich arbeite zur Zeit an einer Java/Swing-Applikation bei der ich auf folgendes Problem gestoßen bin:

Zunächst etwas Code (habe den Code in einem Testprojekt komprimiert um das Problem eingrenzen zu können):
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Data {
	
	private Modul modulcontainer[] = new Modul[50];
	private Modul modul = new Modul();

	public void read() {
		
		File f = new File("output.csv");
		
		try {
			if (f.exists())
			{
				BufferedReader reader = new BufferedReader(new FileReader(f));
				
				String buffer;
				int i = 0;
	
				while ((buffer = reader.readLine()) != null) {
					
				    String[] results = buffer.split("#");

				    String part1 = results[0];
				    Integer part2 = Integer.parseInt(results[1]);
			    
					modul.setName(part1);
					modul.setPunkte(part2);
					
					modulcontainer[i] = modul;
			
					System.out.println("Vorher: " + modulcontainer[i].getName() + " i = " + i);
					
					i++;	 
				}
				
				for (int k= 0; k<5; k++) {
				System.out.println("Nachher:  " + modulcontainer[k].getName() + " k = " + k);
				}
				
				reader.close();
		
			} 

		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
	}
	
	
}

Die Main.java ruft nurnoch
Java:
		Data daten = new Data();
		daten.read();
auf, die Modul.java ist quasi leer also zu ignorieren...

Es geht darum, dass der Wert des Arrays "modulcontainer" per Getter - Funktion in einer anderen Klasse aufgerufen werden soll.

Das Problem: Die Test-Ausgaben:

Vorher: Kolloquium i = 0
Vorher: Abschlußarbeit i = 1
Vorher: Englisch i = 2
Vorher: Mathe i = 3
Vorher: Java i = 4
Nachher: Java k = 0
Nachher: Java k = 1
Nachher: Java k = 2
Nachher: Java k = 3
Nachher: Java k = 4

zeigen, dass sich die Werte im Array verändern:
Während in der while-Schleife noch die richtigen Werte vorhanden sind (Kolloquium,Abschlußarbeit,Englisch,Mathe,Java) so hat das Array "modulcontainer" unmittelbar nach der while-Schleife 5x den Wert (Java).

Ich verstehe nicht wirklich, warum und an welcher Stelle das passiert.

Bitte um Erleuchtung. :)

mfG
 
Zuletzt bearbeitet von einem Moderator:

Nemesys88

Bekanntes Mitglied
Oh.. da hätt ich echt selber drauf kommen müssen, aber ich hab's nicht gesehen... vllt. brauch ich grad mal ne Pause oder so... :D

Oben geändert in private Modul modul; und in jedem Schleifendurchlauf modul = new Modul(); und das Problem war natürlich sofort behoben...

Ich bedanke mich! :)
 
Zuletzt bearbeitet:

AndiE

Top Contributor
Ich habe noch Bauchschmerzen bei der Zeile:

Java:
modulcontainer[i] = modul;

Obwohl rechts und links des Gleichheitszeichens Objekte der Klasse Modul stehen, kann man das so nicht zuweisen, meine ich mich zu erinnern. Besser ist hier die anwendung einer Methode

Java:
public class Modul{
...
copy( Modul m){
this.name=m.name;
this.punkte=m.punkte;
}
 
Zuletzt bearbeitet von einem Moderator:

arilou

Bekanntes Mitglied
Im Gegenteil, man muss aufpassen bei Arrays auf Objekte
Java:
private Modul modulcontainer[] = new Modul[50];
denn hier wird nur Platz für 50 Referenzvariablen ("Pointer") geschaffen, nicht 50 Modul-Objekte angelegt. Man muss noch für jeden Array-Eintrag ein 'new' aufrufen und abspeichern.
 

Nemesys88

Bekanntes Mitglied
Hehe ja, genau das passiert dann auch... modul = new Modul(); modul.setName.... usw. und dann modulcontainer = modul; das ist soweit auch alles kein Problem ;)

Aber hätt noch ne andere Frage und ich mach das mal hier um keinen neuen Thread eröffnen zu müssen:

Ich hab in der Klasse A ein label, das ich in Klasse D aber gerne updaten würde... jetzt könnt ich das übergeben das müsst ich aber über mehrere Klassen machen was sehr kompliziert wäre.

Mein Label sieht so aus:

Java:
		label1 = new JLabel();
		label1.setText(("Summe ECTS: " + daten.berechne_summe() + "               " + "Notendurchschnitt: " +  Math.round( daten.berechne_durchschnitt() * 100. ) / 100.));
		label1.setHorizontalAlignment(SwingConstants.CENTER);
		label1.setBorder(new LineBorder(Color.BLACK));
		add(label1,BorderLayout.SOUTH);

Daten ist die Klasse die das Label aktualisieren soll.

Hab dem label jetzt nen ActionListener mit Timer verpasst, der alle 10 Sekunden "daten.berechne_summe()" aufruft was nicht grade schön gelöst ist, wie ich finde.
Konnte durch googlen keine Lösung finden die funktioniert hat...

Was würdet ihr mir da vorschlagen ?
 
Zuletzt bearbeitet von einem Moderator:

arilou

Bekanntes Mitglied
  • Entweder den Weg "durch mehrere Klassen" (gemeint ist hoffentlich "durch mehrere Objekte") eben doch gehen,
  • oder das umgebende (J)Frame in einer globalen Variable speichern, und ihm eine Methode getLabelXYZ verpassen. Dann kann der Zugriff-Benötigende etwas machen à la
Java:
void method1() {
  JLabel theLabel ;
  theLabel = CHauptProgramm.mainWindow.getLabelXYZ() ;
  theLabel.____ ;
}
Noch besser ist, dem 'mainWindow' dann eine Methode zu verpassen, die nicht einfach das Label "rausrückt", sondern genau das anbietet, was du machen möchtest, z.B.
Java:
void method1() {
  CHauptProgramm.mainWindow.updatePlayerScore( player1.getPoints() );
}
Und selbige Methode setzt dann
theLabel.setCaption( "" + score );
anstatt dass eine "Benutzer-Klasse" da direkt rumwerkelt.
Kommt aber drauf an, ob/wie man MVC oder ähnliches einsetzt.
 

Nemesys88

Bekanntes Mitglied
Hm.. danke.. leider komm ich immernoch nicht weiter...

das Label müsst ich echt von Klasse A > Klasse B > Klasse C > Klasse D schieben (natürlich geht es immer um objekte) damit es dort endlich bekannt ist, das find ich irgendwie nicht gut....

Und man hat mir beigebracht, nicht mit globalen Variablen zu arbeiten...

Ich habs jetzt mit nem Observer versucht, das hat aber leider nicht wirklich funktioniert...

Hab jetzt was von Eventbus gelesen, das werd ich nachher nochmal ausprobieren... wenn nicht jemand bis dahin noch was einfacheres vorschlägt... :)

Danke erstmal.
 

Joose

Top Contributor
Aber hätt noch ne andere Frage und ich mach das mal hier um keinen neuen Thread eröffnen zu müssen:

Wenn du eine Frage zu einem anderen Thema hast dann bitte einfach einen neuen Thread aufmachen (im richtigen Bereich).
Niemand wird anhand des Thread Titel vermuten dass das eigentliche Problem gelöst ist und es nun um JLabels geht.
 

Nemesys88

Bekanntes Mitglied
Okay, das stimmt!

Dann für diesen Thread erstmal:

PROBLEM GELÖST!

_________________________________________________________________
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Variable in for Schleife ansprechen ohne Array ? Java Basics - Anfänger-Themen 25
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
V Erste Schritte Eine Array-Variable mit Benutzereingaben befüllen Java Basics - Anfänger-Themen 3
S Variablen Variable erzeugen und Array mit Variablen befüllen Java Basics - Anfänger-Themen 26
C Erste Schritte Array Werte Ausgeben Probleme mit variable Java Basics - Anfänger-Themen 21
K Vergleich von variable und array Java Basics - Anfänger-Themen 9
M >>Variable in Array erneut abrufen Java Basics - Anfänger-Themen 9
I Array und variable gleicher wert, wird jedoch nicht erkannt Java Basics - Anfänger-Themen 4
P wie bekomme ich ein array in eine string variable Java Basics - Anfänger-Themen 11
M Array - eine Variable auslesen Java Basics - Anfänger-Themen 4
D wert aus variable in array Java Basics - Anfänger-Themen 3
U Array.sort auf variable Array-Größe anwenden Java Basics - Anfänger-Themen 3
S Variable mit Array vergleichen Java Basics - Anfänger-Themen 3
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben