Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Apuja kaipaan

Koodari82 [02.12.2023 15:50:22]

#

Opiskelen Javascript-ohjelmointia, enkä saa seuraavaa tehtävää tehdyksi. Joten kaipaisin viisaampien neuvoja. Laitan tähän tehtävänannon, sekä koodin minkä olen saanut aikaiseksi.

Tehtävä:

Käytä seuraavaa Shape-luokkaa ja luo uusi luokka nimeltä Circle, joka perii Shape-luokan. Circle-luokalla on ominaisuus nimeltä radius, ja metodi getArea().

GetArea() metodi laskee pinta-alan käyttäen seuraavaa kaavaa: 3,14159 * radius * radius. Se myös tulostaa pinta-alan konsolille. Luo ohjelman lopussa uusi Circle-olio komennolla new Circle(0,0,2) ja kutsu lopuksi getArea() -metodia tulostaaksesi pinta-alan konsolille.

class Shape {
  constructor (x, y) {
    this.x = x;
    this.y = y;
  }

  move(x, y) {
    this. x = x;
    this.y = y;
  }
}

Itse tekemäni koodi:

class Shape {
  constructor (x, y) {
    this.x = x;
    this.y = y;
  }

  move(x, y) {
    this. x = x;
    this.y = y;
  }
}

class Circle extends Shape {
  constructor(radius) {
    super('circle');
    this.radius = radius;
  }

   getArea(){
    return super.getArea();
	   console.log(3,14159 * this.radius * this.radius)

  }

}

let circle = new Circle(0, 0 ,2);
circle.getArea();

Virhe ilmoituksena tulee seuraavaa:

Uncaught: TypeError: (intermediate value).getArea is not a function

Metabolix [02.12.2023 17:16:50]

#

Ensinnäkin constructor(radius) on väärin, koska kuten ohjeesta käy ilmi, ympyrälle annetaan kolme arvoa (oletettavasti x, y, radius). Vastaavasti super('circle') on selkeästi väärin, koska super eli tässä tapauksessa Shape tarvitsee arvot x ja y.

Toiseksi getArea on väärin toteutettu, koska yrität siinä kutsua funktiota super.getArea (eli Shape.getArea), jota ei ole olemassa. Sinun pitäisi tuossa funktiossa yksinkertaisesti palauttaa oikean laskutoimituksen tulos, mitään superia ei siihen tarvita.

Kolmanneksi pitää muistaa, että JS:n luvuissa käytetään desimaalierottimena pistettä eikä pilkkua.

Saisitkohan näillä ohjeilla korjattua koodin?

Koodari82 [03.12.2023 09:15:02]

#

Kiitos vinkeistä, mutta ei kyllä korjaantunut näilläkään ohjeilla toimivaksi koodiksi.

Metabolix [03.12.2023 09:21:51]

#

No minkälaiseen koodiin näillä vinkeillä päädyit?

TapaniS [03.12.2023 10:04:26]

#

Nää luokkajutut ovat olleet aina jotenkin hankalia hahmottaa. Meneeköhän se jotenkin näin sitten?

class Circle extends Shape {
  constructor(x, y, radius) {
    super(x, y);
    this.radius = radius;
  }
  ..
  ..

En oo kyllä ikinä tehnyt tämmöisiä super -juttuja eli tää koodi voi olla pielessä. Tuo on "selkäytimellä" oman logiikan mukaisesti laitettu. :) Mutta miten muutenkaan se oikeasti voisi olla?

Koodari82 [03.12.2023 10:16:43]

#

Tuolla tapaa korjailinkin jo koodia vinkkien avulla, mutta tuo getArea-kohta tuottaa päänvaivaa...

Koodari82 [03.12.2023 10:29:08]

#

Sain toimimaan, kiitos vinkeistä!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta