Kort introduktion till objektreferens som parameter
Antag följande exempel: Vi har en värld med två paddor och vi vill kontrollera om de kolliderar med varandra vilket gäller om avståndet mellan dem är mindre än eller lika med dist
.
World w = new World(400, 400); Turtle t1 = new Turtle(w, 100, 100); Turtle t2 = new Turtle(w, 300, 300); int dist = 10;Deklarera och initiera några variabler if ( t1.collision(t2, dist) ) { System.out.println("Krock"); } else { System.out.println("Ingen krock"); }Skicka paddan t2 och avståndskriteriet som parametrar till metoden collision
Så här kan koden för metoden collison
i klassen Turtle
se ut:
public boolean collision(Turtle t, int dist) { int x1 = this.getXPos(); int y1 = this.getYPos();Tag reda på aktuellt objekts position int x2 = t.getXPos(); int y2 = t.getYPos();Tag reda på positionen för det objekt som är parameter int dx = x2-x1; int dy = y2-y1; int d = (int) ( Math.sqrt(dx*dx+dy*dy) );Beräkna avståndet med Pythagoras sats return d <= dist;Returnera true om d är mindre än dist, annars false. }
Vi ser att metoden har två formella parametrar:
Ett Turtle
-objekt och en int
som är avståndet.
Anropet t1.collision(t2,dist)
innebär att t1
är this
i metoden och den aktuella parametern t2
blir den formella parametern t
i metoden.
Således this.getXPos()
är x-positionen för t1
och t.getXPos()
är
x-positionen för t2
.
Ett annat exempel på användning av ett objekt som parameter finns redan i klassen Turtle
nämligen en metod för att vrida en padda mot en annan padda med t.ex.
t1.turnToFace(t2)
dvs där parametern är ett objekt.
Se vidare minilektionen om allmän parameteröverföring.