Kezdőoldal » Számítástechnika » Programozás » Helyesek-e az alábbi feladatho...

Helyesek-e az alábbi feladathoz a lentebbi java program (részlet) ek?

Figyelt kérdés

Írj egy Kifejezes nevű osztályt, amely konstans kifejezéseket reprezentál. Helyezd az osztályt a kifejezesek csomagba. Egy kifejezésnek csak az értékét (egész szám) tároljuk el. Ez az adattag csak az osztály és leszármazottai számára legyen látható, de legyen lekérdezhető és beállítható publikus metódusokon keresztül. Az osztály rendelkezzen egy olyan konstruktorral, amely a kifejezés értékét az alapértelmezett nullára állítja, továbbá rendelkezzen egy olyan konstruktorral is, amely a kapott paraméter alapján állítja be ezt. Definiáld felül az osztályban a toString() metódust úgy, hogy a kifejezés értékét írja ki. (Tipp: szöveggé alakításhoz használd a String.valueOf(ertek) metódust.)


A kifejezesek csomagban hozz létre egy Muvelet osztályt, amely kétoperandusú műveleteket reprezentál és a Kifejezes osztályból származik. Egy művelet tárolja az operátorát (összeadás, vagy kivonás), illetve a bal és jobboldali operandusát (azaz két Kifejezes-t) és rendelkezik egy olyan adattaggal, amely eltárolja, hogy a kifejezés kiértékelése megtörtént-e már. Az operátor és az operandusok legyenek beállíthatóak publikus metódusokon keresztül és a beállításukkor a kifejezés állítódjon kiértékeletlenre. Írj kétféle paraméteres konstruktort. Az egyik csak a művelet operátorát, a másik a művelet operandusait is állítsa be. Használd az ősosztály konstruktorát. A művelet kezdetben legyen mindig kiértékeletlen. Készíts egy csak az osztályból látható kiertekel() metódust, amely lekéri az operandusok értékeit, ezután ezeken az értékeken elvégzi az operátornak megfelelő műveletet, végül pedig visszatér az így kapott eredménnyel. Abban az esetben, ha a művelet operátora nem összeadás, vagy kivonás, akkor a kiértékelés eredménye legyen nulla és írasd ki az alapértelmezett kimenetre, hogy “Ismeretlen operator: [operator]”. Definiáld felül az érték lekérő és beállító metódusokat. A lekérő metódus a művelet értékét adja vissza. A kiértékeletlen művelet értékét először ki kell számolni a kiertekel() metódus használatával. A beállító metódus pedig írja ki az alapértelmezett kimenetre, hogy “Nem ertelmezheto muvelet!”. Készíts toString() metódust is, amely a művelet kifejezést írja ki az alapértelmezett kimenetre “([operandus1][operator][operandus2])” formában. (9 pont)


//Kifejezes.java

package kifejezesek;

class Kifejezes{

protected int kif;


public Kifejezes() {

kif=0;

}


public Kifejezes(int kif) {

this.kif=kif;

}


public int getKif() {

return kif;

}


public void setKif(int kif) {

this.kif=kif;

}


public String toString() {

return String.valueOf(kif);

}

}



//Muvelet.java

package kifejezesek;

public class Muvelet extends Kifejezes{

private String op;

private Kifejezes bal=new Kifejezes();

private Kifejezes jobb=new Kifejezes();

private boolean kiertekelve;


public Muvelet(String op) {

this.op=op;

kiertekelve=false;

}


public Muvelet(int bal, int jobb) {

super(bal);

super(jobb);

kiertekelve=false;

}


public void setOp(int op) {

this.op=op;

kiertekelve=false;

}


public void setErtekek(int bal, int jobb) {

super(bal);

super(jobb);

kiertekelve=false;

}


public void getOp() {

return op;

}


private int kiertekel() {

String op=getOp();

int bal=getBal();

int jobb=getJobb();

if (op.equals==("+")) {

return bal+jobb;

}

else if (op.equals("-")) {

return bal-jobb;

}

else {

System.out.println("Ismeretlen operator: "+op);

return 0;

}

}

public int super.getErtekek() {

return kiertekel();

}

public void setErtekek() {

System.out.println("Nem ertelmezheto a muvelet!")

}


public String toString() {

return String.valueOf(super.getErtekek(bal))+String.valueOf(getOp())+super.getErtekek(jobb);

}

}


Elsősorban arra lennék kíváncsik, hogy ebben a kontextusban helyesen alkalmaztam-e a gettereket és settereket, illetve jól értelmeztem-e a feladatot (vagy legalábbis, más is úgy értelmezi-e)?


Előre is köszönöm a segítséget! :)


2016. márc. 18. 23:46
 1/3 uno20001 ***** válasza:

Szerintem ez így nem egészen működik, tesztelted?


protected int kif;

- én ide valami más nevet használnék, mondjuk „value” vagy valami hasonlót


tudom, a feladatban benne van, de nem értem miért kellene a Művelet osztálynak a Kifejezés osztályból leszármaznia…


private String op;

- egy char-ban is tárolhatnád


public Muvelet(int bal, int jobb) {

super(bal);

super(jobb);

kiertekelve=false;

}

- ez így biztos nem jó, egymás után két értékkel is meghívod az ősosztály konstruktorát. „Az egyik csak a művelet operátorát, a másik a művelet operandusait is állítsa be.”, tehát ennek szerintem így kellene kinéznie:


public Muvelet(char op, Kifejezes bal, Kifejezes jobb) {

this.bal = bal;

this.jobb = jobb;

this.op = op;

this.kiertekelve = false;

}


a többire is ugyanez vonatkozik


int bal=getBal();

int jobb=getJobb();

- hol van a getBal és a getJobb?


if (op.equals==("+")) {

- ez így biztos szintaktikai hiba


public int super.getErtekek() {

return kiertekel();

}

- ez mi szeretne lenni?


return String.valueOf(super.getErtekek(bal))+String.valueOf(getOp())+super.getErtekek(jobb);

- ez a sor is kicsit sánta…



Én valami ilyesmit csinálnék: [link] , igaz, ez nem feltétlen illeszkedik mindenben a feladathoz, de szerintem ha kell már át tudod alakítani.

2016. márc. 19. 13:43
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:

Szia! Köszönöm szépen, hogy időt szántál rá! :)

A kidolgozásodból sikerült megértem! :)

Egyébként nem régen kezdtem programozni, de igyekszem fejlődni! :D

2016. márc. 20. 00:34
 3/3 anonim válasza:

TTIK én így szeretlek ;)


package kifejezesek;

->class Kifejezes{ //oda szerintem kéne az hogy public

protected int kif;


package kifejezesek;

public class Kifejezes{

protected int kif;


szerintem így a helyes a nyakamat nem tenném rá de szerintem így van xD

2016. márc. 20. 21:00
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!