Hallo zusammen,
in meinem Java-Programm (siehe unten) habe ich eine Klasse "GlobalVar" erstellt. Diese enthält Variablen, auf die ich von jeder anderen Klasse aus zugreifen kann.
Nun möchte ich in der Klasse "Weg" zu Beginn einen dieser Werte (Pack.GlobalVar.AktPos) in einer lokalen Variable (AusgangsPos) festhalten. Beim Durchlaufen der Methode "NaechstePos" wird der Wert "Pack.GlobalVar.AktPos" geändert. Am Ende soll er dann mit dem festgehaltenen Wert "AusgangsPos" verglichen werden.
Das Problem ist aber nun, dass sich die lokale Wert in den letzten beiden Zeilen (unter "else") zusammen mit der ebenfalls lokalen Variablen "Pos" ändert.
Das geschieht genau deshalb, weil ich zu Beginn sage "Pos = AusgangsPos;". Nehme ich den Ausdruck weg ändert sich die Variable "AusgangsPos" nicht.
Warum bleibt diese Bindung die ganze Klasse über erhalten, obwohl sie nur zu Beginn der Klasse aufgerufen wurde?
in meinem Java-Programm (siehe unten) habe ich eine Klasse "GlobalVar" erstellt. Diese enthält Variablen, auf die ich von jeder anderen Klasse aus zugreifen kann.
Nun möchte ich in der Klasse "Weg" zu Beginn einen dieser Werte (Pack.GlobalVar.AktPos) in einer lokalen Variable (AusgangsPos) festhalten. Beim Durchlaufen der Methode "NaechstePos" wird der Wert "Pack.GlobalVar.AktPos" geändert. Am Ende soll er dann mit dem festgehaltenen Wert "AusgangsPos" verglichen werden.
Das Problem ist aber nun, dass sich die lokale Wert in den letzten beiden Zeilen (unter "else") zusammen mit der ebenfalls lokalen Variablen "Pos" ändert.
Das geschieht genau deshalb, weil ich zu Beginn sage "Pos = AusgangsPos;". Nehme ich den Ausdruck weg ändert sich die Variable "AusgangsPos" nicht.
Warum bleibt diese Bindung die ganze Klasse über erhalten, obwohl sie nur zu Beginn der Klasse aufgerufen wurde?
Java:
package Pack;
public class GlobalVar
{
public static int[] StartPos = {1000,800};
public static int[] SollPos = {500,400};
public static int [] AktPos=StartPos;
}
--------------------------------------------
package Pack;
public class Weg
{
int[] SollPos;
int[] AusgangsPos;
int[] Pos;
int[] NeuePos={0,0};
int Schrittweite=0;
double AktHoehe=0.0;
double Winkel=0.0;
Position Position;
GlobalVar GlobalVar;
public Weg()
{
GlobalVar = new GlobalVar();
Position = new Position();
SollPos = Pack.GlobalVar.SollPos;
AusgangsPos = Pack.GlobalVar.AktPos;
Pos = AusgangsPos;
}
public void NaechstePos ()
{
....
....
....
if ((Winkel > 45 && Winkel < 135) || (Winkel < -45 && Winkel > -135))
{
Pos[1]=Pos[1]+Schrittweite;
Pos[0]=Pos[0]+(int) (Math.round(Schrittweite*Math.tan(Math.PI/180*Winkel)));
}
else
{
Pos[0]=Pos[0]+Schrittweite;
Pos[1]=Pos[1]+(int) (Math.round(Schrittweite*Math.tan(Math.PI/180*Winkel)));
}