14 svar
137 visningar
civilingengör behöver inte mer hjälp
civilingengör 193
Postad: 20 feb 2022 16:38

Vad är fel med den metoden "forward" (I klassen Turtle)?

Tanken är att en kvadrat skall ritas ut i ett fönster när jag kör "TurtleDrawSquare". Metoden "forward" används i klassen "TurtleDrawSquare" för att göra detta men som det visas på bilden kommer det i fönstret "TurtleDrawSquare" bara upp ett tunnt svart sträck högst upp i hörnet av rutan. Obs att rutan som skall rita linjer har origo uppe i vänstra hörnet med en positiv y-axel nedåt och en positiv x-axel åt höger. Nedan är båda koderna bifogade. Tacksam för svar.

civilingengör 193
Postad: 20 feb 2022 16:43

//uppdatering av koden

Laguna Online 30711
Postad: 20 feb 2022 16:52

Du gör ingenting med this.x och this.y. De kanske inte behövs, men då får du göra w.setX eller nåt sånt i början, i stället för this.x=.

civilingengör 193
Postad: 20 feb 2022 17:06
Laguna skrev:

Du gör ingenting med this.x och this.y. De kanske inte behövs, men då får du göra w.setX eller nåt sånt i början, i stället för this.x=.

Menar du att jag ska ändra x-värdet i slutet av min metod efter if-satsen?

Laguna Online 30711
Postad: 20 feb 2022 18:36

Jag menar att w.getX() kommer att vara 0 första gången, inte 300.

CurtJ 1203
Postad: 20 feb 2022 21:56

Jag har några kommentarer utöver det Laguna redan påpekat.

I penUp() resp penDown() så skapar du en ny boolsk variabel  isPenDown och sätter den till true resp false. Jag tror att du avser att sätta klassvariabeln isPenDown. De är understrukna med gult vilket ger dig en hint om att allt inte står rätt till, i det här fallet att variabeln inte används. Ta bort deklarationen (boolean) i metoderna.

penUp och penDown är sk. setters och då är det vanligt att man använder set... som namn, ex setPenDown()

I kontrollen om isPenDown så skriver du isPenDown = false. Det är en tilldelning och ger inte det resultat du förväntar dig. Jämförelse gör du med dubbla likhetstecken (==). När du kontrollerar en boolean så behöver du inte kontrollera om den är true eller false, den är ett boolskt villkor i sig, dvs (isPenDown == true) kan du enklare skriva (isPenDown)  och om du vill kontrollera om den är falsk så räcker (!isPenDown). I ditt fall kan du nöja dig med

if (isPenDown) {
	// gör vad du ska om pennan är nere
} else {
	// gör vad du ska om pennan är uppe
}
civilingengör 193
Postad: 21 feb 2022 05:44
Laguna skrev:

Jag menar att w.getX() kommer att vara 0 första gången, inte 300.

Men ger jag inte objektet ett startvärde när jag skapar objektet? (Dvs x- och y-koordinat 300)?

civilingengör 193
Postad: 21 feb 2022 05:54
CurtJ skrev:

Jag har några kommentarer utöver det Laguna redan påpekat.

I penUp() resp penDown() så skapar du en ny boolsk variabel  isPenDown och sätter den till true resp false. Jag tror att du avser att sätta klassvariabeln isPenDown. De är understrukna med gult vilket ger dig en hint om att allt inte står rätt till, i det här fallet att variabeln inte används. Ta bort deklarationen (boolean) i metoderna.

penUp och penDown är sk. setters och då är det vanligt att man använder set... som namn, ex setPenDown()

I kontrollen om isPenDown så skriver du isPenDown = false. Det är en tilldelning och ger inte det resultat du förväntar dig. Jämförelse gör du med dubbla likhetstecken (==). När du kontrollerar en boolean så behöver du inte kontrollera om den är true eller false, den är ett boolskt villkor i sig, dvs (isPenDown == true) kan du enklare skriva (isPenDown)  och om du vill kontrollera om den är falsk så räcker (!isPenDown). I ditt fall kan du nöja dig med

if (isPenDown) {
	// gör vad du ska om pennan är nere
} else {
	// gör vad du ska om pennan är uppe
}

Hej Curt och tack för hjälpen! Dock försvinner ritningen totalt när jag tar bort boolean från metoderna. Vet du varför?

civilingengör 193
Postad: 21 feb 2022 05:56 Redigerad: 21 feb 2022 06:10

.

 

civilingengör 193
Postad: 21 feb 2022 06:09

Jag tycks ha löst det!! Tack så mycket för eran hjälp. Däremot blir jag inte klok på vad Curt menade med boolean.

CurtJ 1203
Postad: 21 feb 2022 09:40

Nu tror jag programmeraren visat det i din andra tråd men för att förtydliga min kommentar

Du har en public static boolean isPenDown som du använder här och där och det är rimligt men i metoderna penDown() och penUp() sätter du inte den variabeln utan du deklarerar en ny i respetive metod genom att du skriver boolean isPenDown = true. Denna variabel är bara tillgänglig i den metoden och du använder den inte någonstans, därför är den understruken med gult som varning. Om du vill sätta din globala variabel så ta bort ordet "boolean" där så används den globala isPenDown i st f att deklarera en ny.

civilingengör 193
Postad: 21 feb 2022 14:18 Redigerad: 21 feb 2022 14:36
CurtJ skrev:

Nu tror jag programmeraren visat det i din andra tråd men för att förtydliga min kommentar

Du har en public static boolean isPenDown som du använder här och där och det är rimligt men i metoderna penDown() och penUp() sätter du inte den variabeln utan du deklarerar en ny i respetive metod genom att du skriver boolean isPenDown = true. Denna variabel är bara tillgänglig i den metoden och du använder den inte någonstans, därför är den understruken med gult som varning. Om du vill sätta din globala variabel så ta bort ordet "boolean" där så används den globala isPenDown i st f att deklarera en ny.

Tack jag förstår vad du syftar på. Jag skall trixa lite mer med det och se om jag kan lösa det. Jag har tagit era tips angående boolean och skall se om jag får rätsida på det.

civilingengör 193
Postad: 21 feb 2022 15:17

Uppdatering: streck ritas ut även när dem inte skall ritas ut. Jag misstänker att felet ligger i metoden forward alternativt i konstruktorn.

CurtJ 1203
Postad: 21 feb 2022 18:04

Du har inte läst mitt råd tidigare om att villkor inte kan skrivas med ett =, då blir det en tilldelning. Läs min kommentar #6 igen och specifikt kodmallen i slutet på kommentaren. 

civilingengör 193
Postad: 21 feb 2022 18:43 Redigerad: 21 feb 2022 18:52
CurtJ skrev:

Du har inte läst mitt råd tidigare om att villkor inte kan skrivas med ett =, då blir det en tilldelning. Läs min kommentar #6 igen och specifikt kodmallen i slutet på kommentaren. 

Hej! Tack så väldigt mycket för hjälpen, det löste sig nu.

Svara
Close