Lokale Variablen definieren

  • Antworten:6
  • Bentwortet
Yannick M
  • Forum-Beiträge: 46

09.02.2014, 03:30:50 via Website

Ich definiere in einer Methode lokale Variablen. Die Variable wird danach mit einer Untermethode verändert. Wie kann ich diese abgeänderte Variable für diese eine bestimmte methode beibehalten. Das heisst wenn die Methode exampleone zum zweiten mal aufgerufen wird a=5 und wird nicht wieder a=4 definiert wird.

Das ist nur ein vereinfachter Beispielcode. In Wirklichkeit habe ich 10 von diesen example Methoden, in jeder 5 Variablen und die update Methode ist riesengross.

1public void exampleone() { //Wird von einer anderen Methode jede Sekunde aufgerufen
2 int a=2;
3 int b=3;
4 update(a, b);
5}
6
7
8public void exampletwo() { //Wird von einer anderen Methode jede Sekunde aufgerufen
9 int a=4;
10 int b=5;
11 update(a, b);
12}
13
14private void update(int a, int b) {
15 a=a+1;
16 b=b-1;
17 return;
18}

Meine Versuche:

Wenn ich die Variablen in einer if Schleife definiere, welche ich nur einmal aufrufe, gibt es mir einen Error in der update(a,b) Zeile, die sagt a und b sind nicht definiert.
Und wenn ich die Variablen auserhalb definiere und ihnen in der if schleife die Werte zufüge, gibt es mir den Error in der update(a,b) Zeile, Variablen hätten keine Werte.

Hat jemand eine Idee wie ich das lösen kann?

Vielen Dank für eure Hilfe

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.02.2014, 10:25:51 via Website

wieso machst du das ganze so umständlich?
benutze doch einfach update(5,4);
was willst du überhaupt machen?
Wenn du so viele int werte hast, dann mach doch ein IntegerArray von a und eines von B.
in einer Forschleife gehst du duese Werte dann durch.
pseudocode(nicht getestet):
Etwa so:
[code]
int[] ar = {1,6,4,8,4};
int[] br = {1,2,9,8,5};

for(int i =0;i<ar.lenght;i++)
{
update(ar[i],br[i]);
}
[/code]

PS: Beide Arrays müssen die gleiche Länge haben

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Yannick M
  • Forum-Beiträge: 46

09.02.2014, 19:10:32 via Website

Vielen Dank für deine HIlfe. Jedoch glaube ich nicht, dass das mit dem Array funktionieren würde. Da ich die Werte kombiniert in der Update Methode brauche.

Ich will auf dem Screen 10 verschiedene Fische zeichnen, die sich unabhängig bewegen. Für das braucht jeder seine x und y koordinaten, den Speed und in welchem Bitmap Bild er gerade ist. Im Update wird dann die neue Position berechnet, auf kollisionen gecheckt und dann wird der Fisch gezeichnet.
Die Variablen vom Fisch sollten dann an die drawingfish methode zurückgegeben werden, so das diese nach 40 Millisekunden die Update methode mit den neuen Variablen wieder aufrufen kann. Dabei sollten die Variablen nicht von den vorher definierten Lokalvariablen überschrieben werden.
Ich könnte 40 verschiede Variablen definieren, aber ich glaube da gibt es eine elegantere Möglichkeit.

1public void drawingfish(Canvas canvas) { //Wird all 40 Millisekunden aufgerufen
2 int xfish=(screenwidth+10);
3 int yfish=(heightfish/2) + (int)(Math.random() * ((screenheight - heightfish) + 1));
4 int fishspeed=5;
5 int currentFramefish=0;
6
7 updatefish(canvas, xfish, yfish, fishspeed, currentFramefish);
8 }
9
10 public void drawingfishtwo(Canvas canvas) { Wird all 40 Millisekunden aufgerufen
11 int xfish=(screenwidth+10);
12 int yfish=(heightfish/2) + (int)(Math.random() * ((screenheight - heightfish) + 1));
13 int fishspeed=3;
14 int currentFramefish=0;
15
16 updatefish(canvas, xfish, yfish, fishspeed, currentFramefish);
17 }
18
19 //8 mehr von diesen drawingfish methoden
20
21
22 private void updatefish(Canvas canvas, int xfish, int yfish, int fishspeed, int currentFramefish) {
23 currentFramefish = ++currentFramefish % 4;
24 xfish=xfish-fishspeed;
25
26 if (xfish<-widthfish) {
27 xfish=(screenwidth+10);
28 yfish=(heightfish/2) + (int)(Math.random() * ((screenheight - heightfish) + 1));
29 }
30
31 Rect checkdelf = new Rect (x+screenheight/5,(int) (y+(screenheight/7)+(screenheight/8)*Math.tan(Ingame.jetzt)),x+(screenheight/4),(int) (y+(screenheight/5)+(screenheight/8)*Math.tan(Ingame.jetzt))); //Change dividie number if dolphin the fish doesnt catch
32 Rect checkfish = new Rect (xfish,yfish+(screenheight/25),xfish+(screenheight/20),yfish+(screenheight/20));
33 if (checkdelf.intersect(checkfish)) {
34 xfish=(screenwidth+10);
35 yfish=(heightfish/2) + (int)(Math.random() * ((screenheight - heightfish) + 1));
36 Ingame.score=Ingame.score+1;
37 }
38 int srcXfish = currentFramefish * widthfish;
39 Rect srcfish = new Rect (srcXfish,0, srcXfish + widthfish, heightfish);
40 Rect dstfish = new Rect (xfish, yfish, xfish+(screenheight/10), yfish+(screenheight/10));
41 canvas.drawBitmap(bfish, srcfish, dstfish, null);
42 return;
43 }

Antworten
impjor
  • Forum-Beiträge: 1.793

09.02.2014, 19:19:59 via Website

Ohne mir jetzt den Code durchgelesen zu haben ( der ist mir zu verwurschtelt), warum nicht einfach eine Fisch-Klasse mit einer draw-Methode? drawFish,drawFish2,drawFish3,drawFishN klingt auf jeden Fall unsinnig und viel zu aufwendig.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Yannick M
  • Forum-Beiträge: 46

09.02.2014, 19:25:26 via Website

Und wie bekomme ich in einer Fischklasse mit einer Methode meine 10 Fischen mit ihren unabhängigen Positionen?

Antworten
Yannick M
  • Forum-Beiträge: 46

10.02.2014, 07:07:39 via Website

OMG, warum bin ich nicht auf das gekommen. Manchmal übersieht man den einfachsten Weg und will es kompliziert machen. Sorry

Vielen Dank

Antworten