methodenzähler

Status
Nicht offen für weitere Antworten.

lola

Mitglied
Hallo!
Ich benötige für ein ´Programm 2 Zähler.
Einer soll zählen wie oft eine Methode aufgerufen wurde und das dann an die Main-Methode zurückliefern.
Ich habe schon einiges versucht, aber egal wie ich´s gemacht habe, der Zähler wurde auch erhöht wenn ich in der Methode die gezählt werden sollte etwas rekursiv aufgerufen habe. Das sollte jedoch vermieden werden. Wie muss ich das formulieren?
Das problem beim zweiten Zähler liegt nicht unbedingt am zähler an sich sondern am Startwert.
Der Zähler soll anfangen zu zählen wenn eine Methode aufgerufen wird. Er soll jedoch bei 0 anfangen und mit einem zähler in der Mainmetode gekoppelt sein, sodass die jeweilige zahl vom zähler in der mainmetode abhängt.
also in etwa so:
in der Mainmethode:
while( year<obereSchranke)
year++;

in methode1
age=year-yearBeimErstenÁufruf
age++;
jedes mal wenn year um eins erhöht wird soll also die methode 1 aufgerufen werden und auch deren zähler um 1 erhöht werden.
Ist so etwas überhaupt möglich???
Gruß lola
 
B

bygones

Gast
sorry das zweite hab ich nicht ganz verstanden wann welcher Zähler wie gezählt werden soll.

beim ersten zähler brauchst du noch einen flag (boolean z.b.) wird die Methode von der main oder sonstwo aufgerufen wird der flag gesetzt und der zähler inkremntiert. Wird die Methode rekursiv aufgerufen wird der flag nicht gesetzt und somit der zähler nicht hochgezählt
 

lola

Mitglied
Hallo!
Wie meinst du das mit dem flag? Soll ich einen boolean von der mainmethode aus starten, oder wie soll ich das formulieren , dass nur dann gezählt wrd wenn´s von der main methode aus gestartet wird???.
Ich versuch das mit dem 2. zähler nochmal zu erklären.
also in der mainmethode gibt es einen zähler der immer um eins erhöht wird (year).
in einer anderen methode soll ebenfalls ein zähler sein (age). der soll aber nicht starten, wenn jear startet, sondern erst ab einem späteren zeitpunkt. Aber jedes mal, wenn year um eins erhöht wird soll age (sofern er gestartet wurde) ebenfalls um 1 erhöht werden bis eine bestimmte Schranke erreicht wird.
Ich hoffe, das war jetzt verständlicher.
 
B

bygones

Gast
du hast einen boolean als parameter der methode. Wird von der main aus aufgerufen, so setzt du ihn z.b. true -> variable erhöht. bei rekursiven aufrufen setzt du ihn false -> nicht erhöht

das zweite versteh ich imemr noch nicht. Wie der Zähler (age) soll nicht starten, aber immer erhöht werden... was meinst du mit starten ?

btw - mir kommt das alles ziemlich komisch vor - was ist der sinn dieser variablen ?
 

SnooP

Top Contributor
schick wäre es auch den rekursiven teil in eine zweite private Methode auszulagern... sprich man hat eine Methode die man von außen aufruft um irgendwas zu berechnen, die dann einmal hochzählt und daraufhin die eigentliche rekursive Methode aufruft, die die eigentliche Berechnung macht und natürlich nicht mehr zählt...

Code:
public int doSomething(int x, int y) {
   this.methodCount++;
   return doSomething_rek(x, y);
}

private int doSomething_rek(int x, int y) {
   if (abbruch)
      return x+y;   //bzw. was auch immer ;)
   else
       return doSomething_rek(x+1, y+2);
}

das zweite Problem hab ich auch nicht verstanden ;) ... erklär mal abstrakter was du genau erreichen willst - also das Endziel ;)
 

lola

Mitglied
ok ich versuch´s nochmal. ich möcht das berühmte beispiel der hasenpopulation implementieren. am anfang ist ein brauner hase da. der paart sich nach 4 jahren mit einem andern hasen und es kommt ein weißer hase dazu. im 6 jahr paart sich der ausgangshase wieder und es kommt ein schwarzer hase raus. dieser schwarze hase paart sich nach 5 jahren zu einem weißen haasen...der erste braune hase stirbt nach 8 jahren, der schwarze nach 7 jahren und der weiße nach 9 jahren.
jetzt will ich rausfinden wieviele hasen es von welcher sorten nach wievielen jahren gibt.
ich dachte darna in der main methode einen zähler zu starten, der immer die seit dem start vergangenen jahre angibt. die einzelnen hasenarten wollt ich jeweils in eine methode schreiben. so dass jede methode ein hasenleben simuliert. jetzt muss ich aber beim ersten aufruf der methode im n-ten jahr jeweils einen zähler starten, weil sonst der hase ja weder älter wird noch stirbt. Aber dieser zähler darf immer nur erhöht werden, wenn die jahreszahl aus der mainmethode erghöht wird und muss beendet werden, wenn der hase stirbt. der zähler in der mainmethode des weißen hasen darf also erst im 4. jahr nach dem start zu zählen beginnen. ich hoffe es ist nun klar geworden, was ich mit dem zähler gemeint habe.
 

SnooP

Top Contributor
Also ich hab das jetzt nicht weiter verfolgt - nur gleich zu Beginn der Hinweis - eigentlich wäre es sinnvoller die Hasenarten in drei Klassen zu kapseln - als irgendwie die Art des Hasens in einer Methode zu packen... - dann kannst du nämlich einfach immer neue Objekte erstellen, die dann irgendwie ne Methode paaren oder so haben wo man nen anderen Hasen mitgeben kann, der dann das entsprechende Ergebnis liefert ;)
Die ganzen Hasen kannst du dann ja in ne Liste packen und am Ende die Elemente der Liste bzw. die Größe ebenjener ausgeben... in der main-Methode der aufrufenden Klasse hast du nur noch ne Schleife die immer ein Jahr hochzählt und die entsprechenden Aktionen des Jahres durchzieht - die einzelnen Zähler bzw. Grenzen kann man in den Klassen selbst unterbringen... und mit Modulo (%) könnte man sich auch das Reseten der Zähler sparen, imho...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben