Variablen Klassenübergreifend nutzen

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
sashpta
Beiträge: 104
Registriert: Fr Dez 12, 2014 2:55 pm

Variablen Klassenübergreifend nutzen

Beitrag von sashpta » So Jun 21, 2015 3:07 pm

Hey

wie kann ich eine Variable die in einer Klasse erstellt wurde in einer anderen Klasse verwenden?

also auf das Snake Spiel bezogen wie kann ich die in "public class Snake_0 extends GameGrid" erstellte variable "startingSpeed" in "public void tryToEat(Location lastLocation)" von der Klasse "class Snake extends Actor " verwenden?
Hier der Code hab da mal ein paar Ausrufezeichen hin gemacht wo ich das meine ^^

Code: Alles auswählen

import ch.aplu.jgamegrid.*;
import java.awt.Color;
import java.util.ArrayList;
import java.awt.event.KeyEvent;

public class Snake_0 extends GameGrid
{
	// geschwindigkeit 
	public int startingSpeed = 1000; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


	public Snake_0()
	{
		
		super(20 , 20 ,20, Color.darkGray, false);
		reset();
		show();
		doRun();

	}

	public void reset()
	{
		removeAllActors();
		
		// Nachricht oben einfügen
		setTitle("Bewege die Schlange mit den Pfeiltasten.");

		Snake snake = new Snake();
		addActor(snake, new Location(10, 10));
		addActor(new Mouse(), getRandomEmptyLocation());
		snake.setDirection(Location.NORTH);
	}


	public static void main(String[] args)
	{
		new Snake_0();
	}
}

// ______________ Snake ______________
class Snake extends Actor 
	{
		public ArrayList<TailSegment> tailList = new ArrayList<TailSegment>();
  		public int tailSize = 0;
  	  		
		public Snake()
		{
			super(true, "sprites/snakeHead.gif");
			
		}

		public void act()
		{
			if (gameGrid.kbhit())
			{
				switch (gameGrid.getKeyCode())
				{
					case KeyEvent.VK_UP:
						setDirection(270);
						break;
					case KeyEvent.VK_RIGHT:
						setDirection(0);
						break;
					case KeyEvent.VK_LEFT:
						setDirection(180);
						break;
					case KeyEvent.VK_DOWN:
						setDirection(90);
						break;
					default:
						return;
			}
		}

		int lastIndex = tailList.size() - 1;
		Location lastLocation = getLocation();
		if (lastIndex > -1)
		{
			lastLocation = tailList.get(lastIndex).getLocation();
			for (int i = lastIndex; i > 0; i --)
				tailList.get(i).setLocation(tailList.get(i - 1).getLocation());
			tailList.get(0).setLocation(getLocation());
		}
		move();

		// wenn man das spielfeld verlässt
		if (!isInGrid())
		{
			gameOver("Außerhalb des Spielfeldes!");
			return;
		}
		// wenn man sich selbst isst
		Actor a = gameGrid.getOneActorAt(getLocation(), TailSegment.class);
		if (a != null)
		{
			gameOver("Du kannst dich nicht selbst essen!");
			return;
		}
		tryToEat(lastLocation);
	}
		

	public void gameOver(String text)
	{
		gameGrid.setTitle(text);
		gameGrid.removeAllActors();
		gameGrid.addActor(new Actor("sprites/gameover.png"), new Location(10, 8));
		gameGrid.doPause();
		delay(5000);
		gameGrid.doReset();
		gameGrid.doRun();
	}


	public void tryToEat(Location lastLocation)
	{
		Actor actor = gameGrid.getOneActorAt(getLocation(), Mouse.class);
		if (actor != null)
		{
			TailSegment newTail = new TailSegment();
			gameGrid.addActor(newTail, lastLocation);
			tailList.add(newTail);
			tailSize++;
			
			actor.removeSelf();
			setSimulationPeriod(startingSpeed - 50); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			gameGrid.addActor(new Mouse(), gameGrid.getRandomEmptyLocation());
		}
	}


}	

class Mouse extends Actor
{
	public Mouse()
	{
		super("sprites/sMouse.gif");
	}
}


// ____________ Snake Schwanz ________

class TailSegment extends Actor
{
	public TailSegment()
	{
		super("sprites/snakeTail.gif");
	}
}
habt ihr ne Ahnung ob und wenn ja wie das geht?

Danke :)

Edit by cloidnerux: quote- zu code-Tags geändert

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3080
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Variablen Klassenübergreifend nutzen

Beitrag von cloidnerux » So Jun 21, 2015 4:29 pm

Du kannst globale Variablen anlegen, dass sollte man aber tunlichst vermeiden.
Je nach dem, wie der Parameter genutzt wird, hast du unterschiedliche Lösungen.
Ist er konstant und ändert sich nicht während das Programm läuft, kannst du ihn als "public static" kennzeichnen:

Code: Alles auswählen

public class Snake_0 extends GameGrid
{
   // geschwindigkeit 
   public static int startingSpeed = 1000; 
So kannst du per

Code: Alles auswählen

Snake_0.startingSpeed
darauf zugreifen. Static bedeutet hier, dass die Variable "statisch" ist, sich damit nicht änder. So kann man ohne Instanz einer Klasse, auf diesen Wert zugreifen.

Ändert sich der Wert im laufe des Programmes, solltest du der Klasse Snake eine Instanz der Klasse Snake_0(Und nutzt bitte Sinnvolle Namen) übergeben.
Redundanz macht wiederholen unnötig.
quod erat expectandum

sashpta
Beiträge: 104
Registriert: Fr Dez 12, 2014 2:55 pm

Re: Variablen Klassenübergreifend nutzen

Beitrag von sashpta » So Jun 21, 2015 6:31 pm

Oke danke, wie meinst du das mit der Instanz?

nufan
Wiki-Moderator
Beiträge: 2443
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Variablen Klassenübergreifend nutzen

Beitrag von nufan » So Jun 21, 2015 10:46 pm

cloidnerux hat geschrieben:Du kannst globale Variablen anlegen
Hm? In Java?
cloidnerux hat geschrieben:Ist er konstant und ändert sich nicht während das Programm läuft, kannst du ihn als "public static" kennzeichnen:
Verwechselst du static mit final?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8474
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Variablen Klassenübergreifend nutzen

Beitrag von Xin » Mo Jun 22, 2015 9:05 am

dani93 hat geschrieben:
cloidnerux hat geschrieben:Du kannst globale Variablen anlegen
Hm? In Java?
Klassenintern?

Code: Alles auswählen

public class GlobalVariables
{
  public: 
    public static int value = 0;
};



int accessFromEverywhere = GlobalVariables.value;
Nicht schön, aber Java :-)
cloidnerux hat geschrieben:Ist er konstant und ändert sich nicht während das Programm läuft, kannst du ihn als "public static" kennzeichnen:
Verwechselst du static mit final?[/quote]
Sieht so aus.

sashpta hat geschrieben:Oke danke, wie meinst du das mit der Instanz?
Eine Klasse klassifiziert ein Objekt. Zum Beispiel ein Klumpen Blech mit Rädern gehört zur Klasse "Auto". Wenn wir von class Auto sprechen, muss aber kein Auto anwesend sein. Wir wissen auch ohne Auto, dass ein Auto Räder hat. Von der Beschreibung "class Auto" kannst Du aber nicht überfahren werden. Dafür brauchst Du eine Instanz der Klasse Auto: eben ein echtes Auto und nicht nur die Beschreibung.
"class Auto" ist die Beschreibung, new Auto() erzeugt ein Objekt vom Typ Auto: eine Instanz.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sashpta
Beiträge: 104
Registriert: Fr Dez 12, 2014 2:55 pm

Re: Variablen Klassenübergreifend nutzen

Beitrag von sashpta » Mo Jun 22, 2015 12:03 pm

Oke, erst mal vielen Dank, aber wie würde man das dann als Instanz machen?

ich muss dann in

Code: Alles auswählen

public class Snake_0 extends GameGrid
für die Variable "startingSpeed" ne Instanz erstellen, so wie ich das jetzt verstanden habe, sprich ich muss irgendwie sowas wie

Code: Alles auswählen

public startingspeed()
{
int startingSpeed = 1000;
}
machen oder? und wie ruf ich die später wieder auf? will die ja später wieder in ner anderen class aufrufen

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8474
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Variablen Klassenübergreifend nutzen

Beitrag von Xin » Mo Jun 22, 2015 1:03 pm

Deine Klasse Snake_0 ist ja offenbar Dein Spiel. Also Dein globales Umfeld. Alles wird von einer einzigen Instanz von Snake_0 aus kontrolliert - richtig? Entsprechend kannst Du Deine Variable 'startingSpeed' auch in Snake_0 verwalten.

Wenn Du die Instanz von Snake_0 verlässt (also in gerufenen Methoden anderer Objekte), so übergibst Du entweder den Wert von 'startingSpeed' oder Du leitst Snake_0 von einem Interface ab - zum Beispiel "GlobalConfig", was für alle Informationen Getter anbietet: getStartingSpeed(). Snake_0 implementiert das und alle externen Methoden bekommen eine Referenz zu einem "GlobalConfig"-Objekt. Du übergibst von Snake_0 immer this als Konfiguration und die Methoden können sich alle Informationen von dem GlobalConfig-Objekt abholen, welches still und heimlich Deine Snake_0-Instanz ist.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sashpta
Beiträge: 104
Registriert: Fr Dez 12, 2014 2:55 pm

Re: Variablen Klassenübergreifend nutzen

Beitrag von sashpta » Mo Jun 22, 2015 5:31 pm

Xin hat geschrieben:Deine Klasse Snake_0 ist ja offenbar Dein Spiel. Also Dein globales Umfeld. Alles wird von einer einzigen Instanz von Snake_0 aus kontrolliert - richtig? Entsprechend kannst Du Deine Variable 'startingSpeed' auch in Snake_0 verwalten.

Wenn Du die Instanz von Snake_0 verlässt (also in gerufenen Methoden anderer Objekte), so übergibst Du entweder den Wert von 'startingSpeed' oder Du leitst Snake_0 von einem Interface ab - zum Beispiel "GlobalConfig", was für alle Informationen Getter anbietet: getStartingSpeed(). Snake_0 implementiert das und alle externen Methoden bekommen eine Referenz zu einem "GlobalConfig"-Objekt. Du übergibst von Snake_0 immer this als Konfiguration und die Methoden können sich alle Informationen von dem GlobalConfig-Objekt abholen, welches still und heimlich Deine Snake_0-Instanz ist.
hab das dann so gemacht, hab als Kommentar dazu geschrieben was ich verändert hab, aber das klappt leider nicht :/ hab da bestimmt was falsch gemacht aber hab auch das mit dem "GlobalConfig" und so nicht so recht verstanden ^^

Code: Alles auswählen

import ch.aplu.jgamegrid.*;
import java.awt.Color;
import java.util.ArrayList;
import java.awt.event.KeyEvent;

public class Snake_0 extends GameGrid
{
  
  
  
  public Snake_0()
  {
    
      super(20 , 20 ,20, Color.darkGray, false);
      int startingSpeed = 1000; // hier ist jetzt das startingSpeed in Snake_0 drin
      reset();
      show();
      doRun();
      
    
  }
  
  public void reset()
  {
      removeAllActors();
      
      // Nachricht oben einfügen
      setTitle("Bewege die Schlange mit den Pfeiltasten.");
    
      Snake snake = new Snake();
      addActor(snake, new Location(10, 10));
      addActor(new Mouse(), getRandomEmptyLocation());
      snake.setDirection(Location.NORTH);
  }
  
  
  public static void main(String[] args)
  {
      new Snake_0();
  }
}

// ______________ Snake ______________
class Snake extends Actor 
{
    public ArrayList<TailSegment> tailList = new ArrayList<TailSegment>();
    public int tailSize = 0;
    
    public Snake()
    {
      super(true, "sprites/snakeHead.gif");
      
    }
  
    public void act()
    {
      if (gameGrid.kbhit())
      {
          switch (gameGrid.getKeyCode())
          {
            case KeyEvent.VK_UP:
              setDirection(270);
              break;
            case KeyEvent.VK_RIGHT:
              setDirection(0);
              break;
            case KeyEvent.VK_LEFT:
              setDirection(180);
              break;
            case KeyEvent.VK_DOWN:
              setDirection(90);
              break;
            default:
              return;
        }
      }
    
      int lastIndex = tailList.size() - 1;
      Location lastLocation = getLocation();
      if (lastIndex > -1)
      {
        lastLocation = tailList.get(lastIndex).getLocation();
        for (int i = lastIndex; i > 0; i --)
          tailList.get(i).setLocation(tailList.get(i - 1).getLocation());
        tailList.get(0).setLocation(getLocation());
      }
      move();
    
      // wenn man das spielfeld verlässt
      if (!isInGrid())
      {
        gameOver("Außerhalb des Spielfeldes!");
        return;
      }
      // wenn man sich selbst isst
      Actor a = gameGrid.getOneActorAt(getLocation(), TailSegment.class);
      if (a != null)
      {
        gameOver("Du kannst dich nicht selbst essen!");
        return;
      }
      tryToEat(lastLocation);
  }
    
  
  public void gameOver(String text)
  {
      gameGrid.setTitle(text);
      gameGrid.removeAllActors();
      gameGrid.addActor(new Actor("sprites/gameover.png"), new Location(10, 8));
      gameGrid.doPause();
      delay(5000);
      gameGrid.doReset();
      gameGrid.doRun();
  }
  
  
  public void tryToEat(Location lastLocation)
  {
      Actor actor = gameGrid.getOneActorAt(getLocation(), Mouse.class);
      if (actor != null)
      {
        getStartingSpeed().Snake_0  // hab das jetzt hier hin gesetzt
        TailSegment newTail = new TailSegment();
        gameGrid.addActor(newTail, lastLocation);
        tailList.add(newTail);
        tailSize++;
        
        actor.removeSelf();
        setSimulationPeriod(startingSpeed - 50);
        gameGrid.addActor(new Mouse(), gameGrid.getRandomEmptyLocation());
      }
  }
  
  
} 

class Mouse extends Actor
{
  public Mouse()
  {
      super("sprites/sMouse.gif");
  }
}


// ____________ Snake Schwanz ________

class TailSegment extends Actor
{
  public TailSegment()
  {
      super("sprites/snakeTail.gif");
  }
}




cloidnerux hat geschrieben: Ist er konstant und ändert sich nicht während das Programm läuft, kannst du ihn als "public static" kennzeichnen:

Code: Alles auswählen

public class Snake_0 extends GameGrid
{
   // geschwindigkeit 
   public static int startingSpeed = 1000; 
So kannst du per

Code: Alles auswählen

Snake_0.startingSpeed
darauf zugreifen.
hab das mal versucht, hier der Code:

Code: Alles auswählen

import ch.aplu.jgamegrid.*;
import java.awt.Color;
import java.util.ArrayList;
import java.awt.event.KeyEvent;

public class Snake_0 extends GameGrid
{
  public static int startingSpeed = 1000; 
  
  
  public Snake_0()
  {
    
      super(20 , 20 ,20, Color.darkGray, false);
      reset();
      show();
      doRun();
      
    
  }
  
  public void reset()
  {
      removeAllActors();
      
      // Nachricht oben einfügen
      setTitle("Bewege die Schlange mit den Pfeiltasten.");
    
      Snake snake = new Snake();
      addActor(snake, new Location(10, 10));
      addActor(new Mouse(), getRandomEmptyLocation());
      snake.setDirection(Location.NORTH);
  }
  
  
  public static void main(String[] args)
  {
      new Snake_0();
  }
}

// ______________ Snake ______________
class Snake extends Actor 
{
    public ArrayList<TailSegment> tailList = new ArrayList<TailSegment>();
    public int tailSize = 0;
    
    public Snake()
    {
      super(true, "sprites/snakeHead.gif");
      
    }
  
    public void act()
    {
      if (gameGrid.kbhit())
      {
          switch (gameGrid.getKeyCode())
          {
            case KeyEvent.VK_UP:
              setDirection(270);
              break;
            case KeyEvent.VK_RIGHT:
              setDirection(0);
              break;
            case KeyEvent.VK_LEFT:
              setDirection(180);
              break;
            case KeyEvent.VK_DOWN:
              setDirection(90);
              break;
            default:
              return;
        }
      }
    
      int lastIndex = tailList.size() - 1;
      Location lastLocation = getLocation();
      if (lastIndex > -1)
      {
        lastLocation = tailList.get(lastIndex).getLocation();
        for (int i = lastIndex; i > 0; i --)
          tailList.get(i).setLocation(tailList.get(i - 1).getLocation());
        tailList.get(0).setLocation(getLocation());
      }
      move();
    
      // wenn man das spielfeld verlässt
      if (!isInGrid())
      {
        gameOver("Außerhalb des Spielfeldes!");
        return;
      }
      // wenn man sich selbst isst
      Actor a = gameGrid.getOneActorAt(getLocation(), TailSegment.class);
      if (a != null)
      {
        gameOver("Du kannst dich nicht selbst essen!");
        return;
      }
      tryToEat(lastLocation);
  }
    
  
  public void gameOver(String text)
  {
      gameGrid.setTitle(text);
      gameGrid.removeAllActors();
      gameGrid.addActor(new Actor("sprites/gameover.png"), new Location(10, 8));
      gameGrid.doPause();
      delay(5000);
      gameGrid.doReset();
      gameGrid.doRun();
  }
  
  
  public void tryToEat(Location lastLocation)
  {
      Actor actor = gameGrid.getOneActorAt(getLocation(), Mouse.class);
      if (actor != null)
      {
        
        TailSegment newTail = new TailSegment();
        gameGrid.addActor(newTail, lastLocation);
        tailList.add(newTail);
        tailSize++;
        
        actor.removeSelf();
        setSimulationPeriod(Snake_0.startingSpeed - 50); 
        gameGrid.addActor(new Mouse(), gameGrid.getRandomEmptyLocation());
      }
  }
  
  
} 

class Mouse extends Actor
{
  public Mouse()
  {
      super("sprites/sMouse.gif");
  }
}


// ____________ Snake Schwanz ________

class TailSegment extends Actor
{
  public TailSegment()
  {
      super("sprites/snakeTail.gif");
  }
}



der kann das setSimulationPeriod nicht finden meint er aber warum? hatte das schon mal anders geschrieben, so, dass es bei jedem Tod schneller wurd und da gings auch mit 'setSimulationPeriod' warum jezt nicht?



wobei mir ist grad eingefalle, wär es nicht besser anstatt

Code: Alles auswählen

setSimulationPeriod(startingSpeed - 50);

Code: Alles auswählen

startingSpeed = startingSpeed - 50;
zu machen? und würd das was bringen?

sashpta
Beiträge: 104
Registriert: Fr Dez 12, 2014 2:55 pm

Re: Variablen Klassenübergreifend nutzen

Beitrag von sashpta » Mo Jun 22, 2015 9:56 pm

Mir ist grad noch was aufgefallen, muss man evtl auch bei

Code: Alles auswählen

 setSimulationPeriod
was ändern?
weil der Code ist ja so:

Code: Alles auswählen

import ch.aplu.jgamegrid.*;
import java.awt.Color;
import java.util.ArrayList;
import java.awt.event.KeyEvent;

public class Snake_0 extends GameGrid
{
  private int startingSpeed = 100; // !!!!!!!!!!!!!!!!
  
  
  public Snake_0()
  {
    
    super(20 , 20 ,20, Color.darkGray, false);
    reset();
    setSimulationPeriod(startingSpeed);   // _____________________________________
    show();
    doRun();
    
    
  }
  
  public void reset()
  {
    removeAllActors();
    
    // Nachricht oben einfügen
    setTitle("Bewege die Schlange mit den Pfeiltasten.");
    
    Snake snake = new Snake();
    addActor(snake, new Location(10, 10));
    addActor(new Mouse(), getRandomEmptyLocation());
    snake.setDirection(Location.NORTH);
  }
  
  
  public static void main(String[] args)
  {
    new Snake_0();
  }
}

// ______________ Snake ______________
class Snake extends Actor 
{
  
  public int startingSpeed = 1000; 
  public ArrayList<TailSegment> tailList = new ArrayList<TailSegment>();
  public int tailSize = 0;
  
  public Snake()
  {
    super(true, "sprites/snakeHead.gif");
    
  }
  
  public void act()
  {
    if (gameGrid.kbhit())
    {
      switch (gameGrid.getKeyCode())
      {
        case KeyEvent.VK_UP:
        setDirection(270);
        break;
        case KeyEvent.VK_RIGHT:
        setDirection(0);
        break;
        case KeyEvent.VK_LEFT:
        setDirection(180);
        break;
        case KeyEvent.VK_DOWN:
        setDirection(90);
        break;
        default:
        return;
      }
    }
    
    int lastIndex = tailList.size() - 1;
    Location lastLocation = getLocation();
    if (lastIndex > -1)
    {
      lastLocation = tailList.get(lastIndex).getLocation();
      for (int i = lastIndex; i > 0; i --)
      tailList.get(i).setLocation(tailList.get(i - 1).getLocation());
      tailList.get(0).setLocation(getLocation());
    }
    move();
    
    // wenn man das spielfeld verlässt
    if (!isInGrid())
    {
      gameOver("Außerhalb des Spielfeldes!");
      return;
    }
    // wenn man sich selbst isst
    Actor a = gameGrid.getOneActorAt(getLocation(), TailSegment.class);
    if (a != null)
    {
      gameOver("Du kannst dich nicht selbst essen!");
      return;
    }
    tryToEat(lastLocation);
  }
  
  
  public void gameOver(String text)
  {
    gameGrid.setTitle(text);
    gameGrid.removeAllActors();
    gameGrid.addActor(new Actor("sprites/gameover.png"), new Location(10, 8));
    gameGrid.doPause();
    delay(5000);
    gameGrid.doReset();
    gameGrid.doRun();
  }
  
  
  public void tryToEat(Location lastLocation)
  {
    Actor actor = gameGrid.getOneActorAt(getLocation(), Mouse.class);
    if (actor != null)
    {
      
      TailSegment newTail = new TailSegment();
      gameGrid.addActor(newTail, lastLocation);
      tailList.add(newTail);
      tailSize++;
      
      actor.removeSelf();
      startingSpeed = startingSpeed - 50; // !!!!!!!!!!!!!!!!!!!!!
      gameGrid.addActor(new Mouse(), gameGrid.getRandomEmptyLocation());
    }
  }
  
  
} 

class Mouse extends Actor
{
  public Mouse()
  {
    super("sprites/sMouse.gif");
  }
}


// ____________ Snake Schwanz ________

class TailSegment extends Actor
{
  public TailSegment()
  {
    super("sprites/snakeTail.gif");
  }
}





da wo die '_______________' sind wird ja festgelegt, dass die Geschwindigkeit, mit der sich die Schlange bewegt gleich der Variable startingSpeedist. So, jedoch kann man bei setSimulationPeriod() auch ne Zahl rein schreiben, somit würde man die Variable 'startingSpeed doch gar nicht mehr brauchen, und müsste es nur noch schaffen, dass man das 'setSimulationPeriod()' ändert oder nicht?
Oder ist das so, dass man das nicht dauerhaft ändern kann wenn mans mit Zahlen macht? und dass man deswegen die Variable braucht?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8474
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Variablen Klassenübergreifend nutzen

Beitrag von Xin » Di Jun 23, 2015 5:45 pm

sashpta hat geschrieben:da wo die '_______________' sind wird ja festgelegt, dass die Geschwindigkeit, mit der sich die Schlange bewegt gleich der Variable startingSpeedist. So, jedoch kann man bei setSimulationPeriod() auch ne Zahl rein schreiben, somit würde man die Variable 'startingSpeed doch gar nicht mehr brauchen, und müsste es nur noch schaffen, dass man das 'setSimulationPeriod()' ändert oder nicht?
Oder ist das so, dass man das nicht dauerhaft ändern kann wenn mans mit Zahlen macht? und dass man deswegen die Variable braucht?
An setSimulationPeriod wird nicht die Variable übergeben, sondern eine Kopie des Inhaltes.
Du kannst also auch setSimulationPeriod(100) für den gleichen Effekt angeben.
Ob Du eine Variable benötigst, hängt davon ab, ob Du dir einen Wert merken möchtest, der im Verlauf des Programms variabel ist - der ich also verändert. Ein Punktestand zum Beispiel.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten