Opdracht 6.7

Plaats reactie
admin
Site Admin
Berichten: 39
Lid geworden op: 01-02-2017 08:45

Opdracht 6.7

Bericht door admin » 22-02-2017 19:15

Opdracht 6.7
a.
Op de plaats van de EERSTE puntjes moet een methodeaanroep komen die een objectreferentie naar de plant teruggeeft. Dus op de plaats van de TWEEDE puntjes maak je gebruik van die methode die je eerst hebt opgeroepen bij de plant. En het moet gaan over dat er water bij komt.
Kijk nu eens bij de code vd plant. Je ziet daar een methode gedefinieerd worden:
public void addWater
Bij de opmerking staat: “If 1 amount of water is added, the waterlevel rises with 50.”
Dus je moet een addWater(1); zetten op de plaats van de tweede puntjes. Maar er moet nog wat voor, want het water moet toegevoegd worden aan het object plant.
De code wordt dan: plant.addWater (1);
b.
Bij de klasse Actor zie ik 2 kandidaten: isTouching en getOneIntersectingObject
isTouching is echter een boolean: hij controleert dan of er een ander object is dat het object raakt. Er komt dan een TRUE of FALSE terug.
Bij getOneIntersectingObject wordt het andere object zelf teruggestuurd als antwoord (ipv alleen true/false)
Deze moet je dus hebben.
Het lijkt wat dubbelop, want bij de waterspray staat al de code “if (isTouching..”
Dat is slechts een controle aan de kant van de waterspray of ie de plant raakt. De plant zelf moet ook steeds controleren of de waterspray hem raakt. Als dat gebeurt, moet hij dat ( = de info over zichzelf) doorgeven. Dat kan dus met de getOneIntersectingObject.

Je krijgt dus als code: Plant plant = getOneIntersectingObject (Plant.class)
c.
Probeer dus deze code:
public void act() {
move(3);
if (isTouching (Plant.class)) {
Plant plant = getOneIntersectingObject (Plant.class);
plant.addWater (1);
gardener.addPoints(1);
World world = getWorld();
world.removeObject (this);
}
}
Je krijgt dan bij compilen de foutmelding zoals te zien is op de pagina van inf-actief: actor cannot be converted to plant. Warom het niet mag, staat bij 6.7 onderaan uitgelegd: https://moodle.informatica-actief.nl/mo ... p?id=35069
Dat lijkt raar, want plant is een subklasse van actor. Maar kennelijk mag dit niet. De oplossing is casting ( = uitspreken). Je moet uitspreken dat dat het hier om een objectreferentie van de klasse Plant gaat, niet van de klasse actor.

Plaats reactie