Variable ändert sich nicht

Status
Nicht offen für weitere Antworten.

_antje_

Mitglied
Hallo,

ich habe in einer Klasse folgende Methoden um die Variabel anzVar zu manipulieren. anzVar selber ist im Konstruktor als int auf 1 gesetzt.

Code:
 public void setAnzVar(int anz)	
	 {
	 	anzVar=anz; 
		AlgFenster.text.append("setAnzahlVar: "+anzVar+"\n");
	 }
	 
public int getAnzVar()
	 {
		AlgFenster.text.append("GetAnzVar: "+anzVar+"\n");
	 	return anzVar;
	 }
	 
public void inkrementAnzVar()
	 {
	 	setAnzVar(anzVar++);
		AlgFenster.text.append("inkremtentAnzVar: "+anzVar+"\n");
	 }

In meiner Dialogklasse greife ich auf diese Variable anzVar zu, um diese zu erhöhen. Aber egal wie ich sie auch verändere, egal welche Methode ich einsetze, die Variable anzVar ändert sich einfach nicht. Ich kann sie nicht hochzählen. Sie bleibt immer auf dem Wert im Kontruktor. Ich habe auch schon probiert, sie außerhalb vom Kontruktor zu initialisieren, aber auch bleibt sie bei dem initialisierten Wert.
Was habe ich da falsch gemacht?

Kann mir bitte jemand helfen?
Danke

Tschau
Antje
 

Mizus

Bekanntes Mitglied
hmm... also ich sehe in deinem code keine Fehler.
Aber kann es sein das du beim du die Variable mit final deklariert hast???
Ansonsten ist es auch noch möglich das du an irgendeiner anderen Stelle die Variable wieder auf den default Wert setzt.
 

L-ectron-X

Gesperrter Benutzer
Code:
setAnzVar(anzVar++);
Du benutzt hier den Postimkrement-Operator, dass heißt, Du übergibst erst die Variable anzVar an setAnzVar() und erst danach wird die Variable anzVar um eins erhöht. Danach wird die Methode verlassen und die lokale Variable zerstört.
Versuche es doch mal so:
Code:
setAnzVar(++anzVar);
Nun wird die Variable anzVar vor der Übergabe an die setAnzVar()-Methode inkermentiert. (Preinkement)
 

Isaac

Bekanntes Mitglied
Code:
public void inkrementAnzVar() 
    { 
       setAnzVar(anzVar++); 
      AlgFenster.text.append("inkremtentAnzVar: "+anzVar+"\n"); 
    }


Diese Methode muss anzVar verändern. Du führst hier ein Postinkrement durch. mit SetAnzVar wird also noch der alte Wert gesetzt und danach inkrementiert. Die Ausgabe ins Fenster muss also die inkrementierte anzVar anzeigen. Es sei denn du hast anzVar als Final deklariert oder du versteckst anzVar unter einer lokalen Variable. In Eclipse kann man das auf Error oder Warning stellen damit sowas nicht passiert "Local variable declaration hides another field or variable".

Andere Möglichkeiten fallen mir im Moment nicht ein.
 

_antje_

Mitglied
Der Debugger bringt keine Fehler, es werden auch keine Exceptions geworfen.
In der Klasse Dialog verwende ich immer das gleiche Objekt, um auf anzVar zuzugreifen.
Ich habe auch schon gesucht, ob ich die Variable vielleicht wieder auf default setze, habe aber nichts gefunden.
Die static Variante hatte ich erst versucht, dass ging auch nicht, deshalb habe ich es dann mit dem Objekt versucht.
Ich weiß echt keinen Rat mehr.
 

Isaac

Bekanntes Mitglied
Dann poste doch mal den kompletten Code (wenn er denn nicht 10 Seiten lang ist). Dann kann ich das mal durch meine Compiler jagen.
 

Pulvertoastman

Bekanntes Mitglied
Man kann einen Debugger auch benutzen, um haltepunkte zu setzen, um dann die Ausführung schrittweise fortzusetzen und das Verhalten der Variablen beobachten.
 

_antje_

Mitglied
Ich habe keine final Variable,

beim Inkrementieren wird anzVar eins höher angezeigt, wenn ich danach aber getAnzVar aufrufe, ist anzVar wieder default.

++anzVar, geht auch nicht
 

_antje_

Mitglied
Hier ist der Qellcode.

Das Programm ist schon umfangreicher, da es sich um eine Projektarbeit handelt.

Im Dialog habe ich ein Objekt von Algorithmus angelegt. Der betreffende Quellcode steht unter type=5 und in der Ereignisbehandlung unter "Variable hinzufügen".
Ich hoffe, du siehst durch.

Klasse Algorithmus:
Code:
public class Algorithmus 
{
	boolean standard;
	double x,y,z;
	int step;
	int[] folge;
	
	private int anzVar;
	public String[] varBez;
	public double[] varWert;

	static boolean varDef;
	
	public Algorithmus()
	{
		standard=true;
		varDef=false;
		step=0;		
				
		anzVar=0;		
				
		varBez=new String[anzVar];
		varWert=new double[anzVar];	
		for(int i=0;i<anzVar;i++)
		{
			varBez[i]="";
			varWert[i]=0;		
		}
				
		if(standard==true){	x=10;y=5;z=0;}
		else{	x=10;	y=5; z=0;}
				
	}

	 public void setAnzVar(int anz)	
	 {
	 	anzVar=anz; 
		AlgFenster.text.append("setAnzahlVar: "+anzVar+"\n");
	 }
	 
	 public int getAnzVar()
	 {
		AlgFenster.text.append("GetAnzVar: "+anzVar+"\n");
	 	return anzVar;
	 }
	 
	 public void inkrementAnzVar()
	 {
	 	setAnzVar(++anzVar);
		AlgFenster.text.append("inkremtentAnzVar: "+anzVar+"\n");
	 }
	 
	public void setStandard(boolean b) {standard=b;	}

	//public void setFolge(int wert){folge[step]=wert; step++;}
		
/*	static String getVar()
	{
		String str=new String("Variablen: ");
		
		for(int i=0;i<anzVar;i++)
				str=" "+var[i]; 
				
			
		return str;
	}*/
	
	 void initialVar()
	{
		varBez=new String[anzVar];
		varWert=new double[anzVar];
	}
	
	 void setVariablen(String var, double wert)
	{
		for(int i=0;i<anzVar;i++)
			{
				varBez[i]=var; 
				varWert[i]=wert;
				AusgabeFenster.text.append("Variable:"+varBez[i]+"  Wert: "+varWert[i]+"\n");
		
		} 
	}
	
	
	
	double[] getVarWerte()
	{
		return varWert;
	}
	
	 String[] getVarBez()
	{
		return varBez;
	}
	
		
}

Klasse Dialog:
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Dialog extends JDialog implements ActionListener
{
	private JPanel buttonPanel=new JPanel();
	private JPanel dialogPanel=new JPanel();
	private JTextField eingabe1=new JTextField();
	private JTextField eingabe2=new JTextField();
	private JTextField eingabe3=new JTextField();
	private JTextField eingabe4=new JTextField();	
	private Label lb1,lb2,lb3,lb4;
	private JButton okButton=new JButton("OK");
	private JButton abrButton=new JButton("Abrechen");	
	private JButton addVar=new JButton("Variable hinzufuegen");
	
	static int dlg=0;
		
	Algorithmus alg=new Algorithmus();
		
	JTextField[] text;
	JTextField[] textWert;
	Choice[] typ;
		
	public Dialog(String titel,boolean modal,int type)
	{
		setTitle(titel);
		setSize(300,200);
		eingabe1.setText("");
		eingabe2.setText("");
		eingabe3.setText("");
		eingabe4.setText("");
		eingabe1.setBounds(100,100,50,25);
		eingabe2.setBounds(100,140,50,25);
		eingabe3.setBounds(100,180,50,25);
		buttonPanel.add(okButton);
		buttonPanel.add(abrButton);
	
		
		
		
		if(type==5)//Variablen eingeben
	            {
	                    int anz=alg.getAnzVar();
					
		Label[] label=new Label[anz];
		Label[] labelWert=new Label[anz];
		Label[] labelType=new Label[anz];
				
		text=new JTextField[anz];
		textWert=new JTextField[anz];
				
		setSize(350,100+anz*40);
		buttonPanel.add(addVar);			
		
		dialogPanel.setLayout(new GridLayout(anz*2,2));

		for(int i=0;i<anz;i++)
		{
                		label[i]=new Label("Variable "+(i+1)+": ");
			labelWert[i]=new Label("Wert "+(i+1)+": ");
			//labelType[i]=new Label("Type "+(i+1)+": ");
			text[i]=new JTextField();
			textWert[i]=new JTextField();
			text[i].setBounds(100,100+(40*i),50,25);
			textWert[i].setBounds(100,100+(40*i),50,25);
			//text[i].setText(alg.getVarBez(i));
			//textWert[i].setText(""+alg.getWert(i));
										 
			//typ[i].add("int");
			//typ[i].add("double");
			//typ[i].add("String");
			
		//	dialogPanel.add(labelType[i]);
			dialogPanel.add(label[i]);
			dialogPanel.add(labelWert[i]);
										
			//dialogPanel.add(typ[i]);typ[i].show();
			dialogPanel.add(text[i]);
			dialogPanel.add(textWert[i]);
							
		}
		dlg=5;
	}
	
                if(type==6) //Anzahl Variablen
	{
	    	if(Algorithmus.varDef==true)
		{
			
		}
		else
		{
		lb1=new Label("Wieviele Variablen?");
		dialogPanel.setLayout(new GridLayout(2,0));
		dialogPanel.add(lb1);
		dialogPanel.add(eingabe1);	
		dlg=6;
	}
			
}
		

	
            getContentPane().add(dialogPanel,BorderLayout.CENTER);
            getContentPane().add(buttonPanel,BorderLayout.SOUTH);
	okButton.addActionListener(this);
	abrButton.addActionListener(this);
	addVar.addActionListener(this);
	setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		String kommando=e.getActionCommand();
		
		if(kommando.equals("OK"))
		{
			
			if(dlg==5)
			{	
				int anz=alg.getAnzVar();
				
				String[] str=new String[anz];
				double[] wert=new double[anz];
									
				for(int i=0;i<anz;i++)
				{
					str[i]=text[i].getText();
					wert[i]=Double.parseDouble(textWert[i].getText());
					
					AlgFenster.text.append("Variable:"+ str[i]+" = ");
					AlgFenster.text.append("Wert"+wert[i]+"   "+i+"\n");
					
	//				
				}
	
				alg.initialVar();
								
				//for(int i=0;i<anz;i++)				
				//alg.setVariablen(str[i],wert[i],i);				
								
	//			for(int i=0;i<anz;i++)
	//			AlgFenster.text.append(Algorithmus.getWert(i)+""+Algorithmus.getVarBez(i)+"\n");
			}
			
			if(dlg==6)
			{
				int  var=Integer.parseInt(eingabe1.getText());
				alg.setAnzVar(var);
				AlgFenster.statusleiste.setText("Variablen: "+var);
				Dialog dlg=new Dialog("Variablen",false,5);
			
			}
			
			
			
			setVisible(false);
			dispose();
		}
		
		
		
		if(kommando.equals("Variable hinzufuegen"))
				{
					alg.inkrementAnzVar();
										
					Dialog dlg=new Dialog("Variablen definieren",false,5);
					
					setVisible(false);
					dispose();
					
				}
	}
}
 

Mick

Bekanntes Mitglied
Hey,

Code:
      if(kommando.equals("Variable hinzufuegen")) 
            { 
               alg.inkrementAnzVar(); 
                               
               Dialog dlg=new Dialog("Variablen definieren",false,5); 
                
               setVisible(false); 
               dispose(); 
                
            }

hier erstellst Du eine neue Instanz von Dialog und schliesst Deinen. Damit
ist auch das Algo Objekt weg! Da kann dann auch nix inkrementiert bleiben!

Lösungsvorschlag: Dem Konstrutor von Dialog einen Algo mitgeben.

Nochwas, was soll das bezwecken?
Code:
      anzVar=0;       
             
      varBez=new String[anzVar]; 
      varWert=new double[anzVar];    
      for(int i=0;i<anzVar;i++)  // -> anzVar ist 0, da wird die Schleife garnicht duchlaufen!!!
      { 
         varBez[i]=""; 
         varWert[i]=0;       
      }

Grüße,
Mick
 

Isaac

Bekanntes Mitglied
Also anhand der geposteten Sourcefragmente kann ich keinen Fehler finden auch wenn mir die Klasse Algorithmus sehr seltsam vorkommt da sie in meinen Augen kaum bis garkeinen Sinn macht.
Jedenfalls kann es nicht sein das wenn du


Code:
alg.inkrementAnzVar();
alg.inkrementAnzVar();
alg.getAnzVar();

Aufrufst anzVar immer noch die selbe Zahl ist.

@Mick

alg ist Klassenglobal in Dialog definiert und ist danach nicht weg.
Edit: Ich Schelm :) Du hast natürlich recht. Er wirft sich ja selbst auf den Müll. Ashe auf mein Haupt :autsch:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
A Variable in if initialisieren Allgemeine Java-Themen 23
S Variable als Objekt Name Allgemeine Java-Themen 3
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
L Variablen Variable nicht aktualisiert Allgemeine Java-Themen 3
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
M Variable ändern bei jedem Schleifendurchlauf Allgemeine Java-Themen 32
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S JFrame Variable mitgeben Allgemeine Java-Themen 5
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
F Aktuelle Variable Allgemeine Java-Themen 2
J String Variable verändert sich plötzlich Allgemeine Java-Themen 8
J private static final String variable Allgemeine Java-Themen 8
A Long variable wird negativ??? Allgemeine Java-Themen 1
reibi Classpath Classpath Variable beim Tomcat Allgemeine Java-Themen 2
M Zeiger auf statische Variable Allgemeine Java-Themen 1
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
F Variable übergeben?! Allgemeine Java-Themen 2
L Variable auch in der function verfügbar machen? Allgemeine Java-Themen 4
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
P Variablen Variable von void im ActionListener verwenden Allgemeine Java-Themen 3
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
iB0T Variable Wert ausrauchen Allgemeine Java-Themen 3
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
B Variable class in java.lang.Object Allgemeine Java-Themen 11
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
X Windows-Environment-Variable per jRegistryKey anpassen Allgemeine Java-Themen 6
P Variable in Array stellen Allgemeine Java-Themen 11
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
G Variablen Variable extern speichern - wie? Allgemeine Java-Themen 9
M Variablen Wie Variable verfügbar machen? Allgemeine Java-Themen 16
A variable aus einer anderen klasse verändern Allgemeine Java-Themen 5
G Variable Methodenwahl Allgemeine Java-Themen 11
C JFormattedTextField Inhalt einer Variable zuweisen Allgemeine Java-Themen 11
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
B Umgebungsvariable Variable wird nicht übernommen Allgemeine Java-Themen 4
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
C Environment Variable in Pfad -> Datei öffnen Allgemeine Java-Themen 5
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
algorismi int-variable Value Change event Allgemeine Java-Themen 3
E Variable dynamisch ausgeben Allgemeine Java-Themen 5
trash super() mit Variable bestücken Allgemeine Java-Themen 3
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
A Variable Parameterinhalte an einen Query übergeben? Allgemeine Java-Themen 3
B static Variable / Unterklasse Allgemeine Java-Themen 2
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
Daniel_L RegEx - variable Vorkommen ersetzen? Allgemeine Java-Themen 5
P Unicode-Sequenz (u1234) in Variable speichern und ausgeben Allgemeine Java-Themen 6
G auf variable in anderer class zugreifen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
V Variable vom Typ String zum Typen "Message" konve Allgemeine Java-Themen 2
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
G Speicherverbrauch einer Variable Allgemeine Java-Themen 2
C ArrayList mit Variable im Namen Allgemeine Java-Themen 16
T JNI Referenz auf Variable in Java? Allgemeine Java-Themen 2
G Überprüfen, ob Variable ein Array ist? Allgemeine Java-Themen 5
R Member-Variable erzwingen Allgemeine Java-Themen 17
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
M Zugriff auf Objekt, Name in Variable Allgemeine Java-Themen 3
G Problem mit einer Variable Allgemeine Java-Themen 3
O Future Variable Allgemeine Java-Themen 4
M variable übergeben NICHT KOPIEREN Allgemeine Java-Themen 12
loadbrain KeyEvent mit Variable verknüpfen Allgemeine Java-Themen 4
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
G Variable wird ignoriert - warum ? Allgemeine Java-Themen 36
L ctrl-z wird nicht in Variable gespeichert Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
R Wenn Variable = wat ist Allgemeine Java-Themen 7
H Zugriff auf statische Variable synchronisieren Allgemeine Java-Themen 4
H globale Variable wird nicht überall erkannt Allgemeine Java-Themen 3
G Zugriff auf Variable in abgeleiteter Klasse Allgemeine Java-Themen 6
R Eine Variable an eine Methode mit Array übergeben Allgemeine Java-Themen 7
E Variable in einer Methode Allgemeine Java-Themen 13
O Environment Variable Setzen Allgemeine Java-Themen 2
G Referenz auf Variable! Allgemeine Java-Themen 3
C Variable aus einer Methode einlesen in einer verarbeiten und Allgemeine Java-Themen 6
G 1.5er String.format() -> variable Feldlaenge? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben