Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
In dem Hamster Programm zum Lernen von Java möchte ich, dass wenn mein Hamster ein Korn frisst ein Zähler jedes mal +1 rechnet, damit ich die Anzahl der Körner die gefressen wurden kenne. Dazu habe ich eine Prozedur angelegt
void nimmkorn(){
int zaehler;
nimm();
zaehler = (zaehler +1);
}
Jetzt kommt aber der Fehler, dass ich die Variable zaehler nicht initialisiert habe, wenn ich ihr aber in der Prozedur einen Wert zuteile, dann wird ja jedes mal der Wert der Variable beim erneuten Prozeduraufruf wieder auf den Wert zurückgesetzt.
Wie kann ich das umgehen/lösen?
Ich kenne ja das ganze drumherum um diese Methode nicht. Aber zaehler sollte als Instanzvariable deklariert werden und z.B. im Konstruktor auf 0 gesetzt werden.
Sorry, aber ich konnte es noch nicht lösen.
Ich versuche noch einmal mein konkretes Problem zu schildern.
Ich habe ein Programm (aus dem Internet (Hamster Simulator)).
In dieser kann der Hamster Körner mit der Prozedur nimm() fressen. Jetzt möchte ich aber, dass ich weiß wie viele Körner er frisst. Daher wollte ich eine neue Prozedur NimmKorn machen, in der das Korn gefressen wird, also die Prozedur nimm() ausgeführt wird und eine zählvariable jedes mal um 1 erhöht wird.
Soweit so gut, aber Java will von mir, dass ich meine Variable zaehler initialisiere und ihr in der Prozedur einen Wert gebe. Wenn jetzt aber die Prozedur mehrmals aufgerufen wird, wird ja die Variable dadurch immer wieder auf den Wert zurückgesetzt.
Wie kann ich dies umgehen (bin noch ein Einsteiger)
Das stimmt zwar auch, ist aber nicht dein einziges Problem. Denn egal was du in diese Variable reinschreibst, sobald du die Methode nimmKorn() verlässt ist diese Variable weg da sie nur lokal in der Methode angelegt wird. Du musst sie ausserhalb anlegen, deshalb das mit der Instanzvariablen.
Schon einmal danke, dass du dir die Zeit nimmst mir zu helfen. Ich verstehe nun auch das angesprochene Problem und habe nun folgendes probiert:
public class nimmkorn{
int zaehler = 0;
}
void nimmkorn(){
int zaehler;
nimm();
zaehler =(zaehler +1);
}
Er sagt mir aber immernoch, dass bei zaehler =(zaehler +1); die Variable nicht initialisiert wurde, aber ich habe es doch vorher bei der Klasse gemacht, oder ?
Ja weil du in der Methode nimmKorn eine neue Variable mit dem gleichen Namen anlegst. Mach es mal so:
public class nimmkorn{
private int zaehler = 0;
}
void nimmkorn(){
nimm();
zaehler = zaehler +1;
}