• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

OOP

Started by NDK, 22.09.2011, 21:02:52

« predchdzajce - alie »

xxx3

niekto ochotny by sem mohol dat 9. cviko, kedze nam s Kapom odpadlo

Agamemnon

Quote from: esperian on  15.11.2011, 04:06:52
takze Quizova otazka ya jeden puntik xDD ->

ako spravit metodu addItem z 9 cvika ??

daj celé znenie úlohy a možno ti poradím... takto nemám šancu :) čo má tá metóda robiť, etc... nejaký popis ku nej
All code is crap.

42

esperian

#252
Implementujte telo metódy void addItem( Item item ) rozhrania Room, ktorá zabezpečí pridanie predmetu do miestnosti.

edit// dik moc pokusim sa o nieco  ;)

Agamemnon

Quote from: esperian on  15.11.2011, 04:32:16
Implementujte telo metódy void addItem( Item item ) rozhrania Room, ktorá zabezpečí pridanie predmetu do miestnosti.

hmm, napr. niečo takéto:



class RoomImpl implements Room {
  private List<Item> items;
 
  ...
 
  public void addItem(Item item) {
    // sem môžu prísť nejaké testy - napr. či sa predmet už nenachádza v liste, či sa predmet vôbec môže nachádzať v miestnosti a pod...
    // ale nemusia byť, keďže v podstate toto nebude verejná trieda a pristupovať ku nej budeš len ty...
    items.Add(item);
  }
}



ak to nie je čisto v jave, tak sa ospravedlňujem... s javou som nerobil už niekoľko rokov a toto píšem z hlavy :) možno som to pomiešal trochu s c#
All code is crap.

42

Eriik

ako by asi mal fungovať príkaz RESTART ? stačí nanovo vytvoriť všetky miestnosti a backpack a tie staré proste nejako zmiznú ? :D alebo to treba robiť inak ?

Agamemnon

Quote from: Eriik on  15.11.2011, 07:17:08
ako by asi mal fungovať príkaz RESTART ? stačí nanovo vytvoriť všetky miestnosti a backpack a tie staré proste nejako zmiznú ? :D alebo to treba robiť inak ?

ach, radosti garbage collectora... :)

mal by si: zrusit stare itemy, miestnosti, inventar, vsetko v nom... stav hry, poziciu hraca, etc, etc...
a vytvorit vsetko znovu...

teoreticky: ak urobis len to, ze vytvoris vsetko znovu, tak by to malo stacit a GC po istom case stare veci z pamate odstrani... vzdy ale existuje riziko, ze mas niekde zabudnutu nejaku referenciu a pod., a vdaka nej ti tie veci ostanu v hre, a pripadne ti ju mozu aj ovplyvnovat
All code is crap.

42

AnvilOfFury

Včera vraj nebolo cviko s mirekom, na dnes to už náhodou neplatí?
Keep information to yourself - Knowledge is power. Think job security. Never provide documentation.
Use Real Tools - No "fancy-pancy" IDEs. Real developers only use vi.
Compiled = Ship It - User acceptance testing is an absolute waste of time.

bodon14

Caute predam kompletne zadanie na OOP ...cena dohodou... moj mail je bodon14@azet.sk...

BlackBerry

Chcel by som spytat ci mozem menit scenar ktory som odovzdal...nie cely...len neake veci tam chcem doplnit

ppeess

Quote from: BlackBerry on  15.11.2011, 23:23:01
Chcel by som spytat ci mozem menit scenar ktory som odovzdal...nie cely...len neake veci tam chcem doplnit

Mozes .....

visvk

cavte mam problem pri spustani adventury, som v stadiu ked mam vyskusat spustenie hry,, ale pri Run mi vyhodi chybu
Exception in thread "main" java.lang.NullPointerException
   at adventure.GameImpl.start(GameImpl.java:51)
   at adventure.Main.main(Main.java:29)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

ale funkcia start je dobre napisana, a aj loop je dobre napisany (aspon dufam), ked viete prosim poradte

Agamemnon

#261
hmm... chybu máš v súbore GameImpl.java na riadku 51... objekt, ktorý sa tam snažíš použiť, nemá nastavenú hodnotu a je preto null...

- nabudúce pastni kód, keď chceš niečo konkrétne opraviť, s niečim pomôcť...
- nauč sa čítať výnimky... píše ti to, čo sa stalo (null pointer) a kde sa to stalo (GameImpl.java:51)... nvm, čo viac ešte chceš...
- nauč sa používať debugger

ak sa to nenaučíš, tak sa rovno odhlás z informatiky... (ak nie si informatik, tak sa ospravedlňujem a toto sa ťa netýka... predchádzajúce body áno)
All code is crap.

42

razer08

vedel by mi nekto vysvetlit,ze ako urobim execute v triede explore?  ak:

Agamemnon

explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal
All code is crap.

42

razer08

Quote from: Agamemnon on  19.11.2011, 00:18:29
explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal

ked napisem napr.  "preskumaj rybar",tak ma vypisat meno a opis predmetu

ppeess

Quote from: razer08 on  19.11.2011, 00:25:43
Quote from: Agamemnon on  19.11.2011, 00:18:29
explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal

ked napisem napr.  "preskumaj rybar",tak ma vypisat meno a opis predmetu

kedze tam mas tuto medotu getExploreDescription() tak podla nazvu usudzujem ze iba opis predmetu.

Agamemnon

#266
Quote from: razer08 on  19.11.2011, 00:25:43
Quote from: Agamemnon on  19.11.2011, 00:18:29
explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal

ked napisem napr.  "preskumaj rybar",tak ma vypisat meno a opis predmetu

aha, okej potom niečo takéto:


public void explore() {
  Item item = currentRoom.getItem(itemName);
  system.out.println(item.getDescription());
}


- itemName je ten parameter za príkazom (tj. rybar v preskumaj rybar)
- implementácia miestnosti Room má metódu getItem(string), ktorá vráti referenciu na predmet podľa jeho mena
- zvyšok platí to, čo v predchádzajúcom príklade - pre currentRoom, java metódy, etc...
All code is crap.

42

razer08

Quote from: Agamemnon on  19.11.2011, 01:26:40
Quote from: razer08 on  19.11.2011, 00:25:43
Quote from: Agamemnon on  19.11.2011, 00:18:29
explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal

ked napisem napr.  "preskumaj rybar",tak ma vypisat meno a opis predmetu

aha, okej potom niečo takéto:


public void explore() {
  Item item = currentRoom.getItem(itemName);
  system.out.println(item.getDescription());
}


- itemName je ten parameter za príkazom (tj. rybar v preskumaj rybar)
- implementácia miestnosti Room má metódu getItem(string), ktorá vráti referenciu na predmet podľa jeho mena
- zvyšok platí to, čo v predchádzajúcom príklade - pre currentRoom, java metódy, etc...

diky pekne :) uz to funguje  bp

swety

rozhrania v kniznici Jonesa asi nemozeme menit, ze?

ak si do GameImpl doplnim nejake metody ktore v Game nie su (napr. zobrazenie menu), aj tak ich nemozem volat napr. v Quit.execute(), ked je tam parametrom objekt typu Game.

chcel som to riesit pretypovanim a teda nieco v zmysle
(GameImpl)game.showMenu();

ale zjavne takto to nefunguje, takze to mam nakoniec riesene cez dalsiu premennu
GameImpl game2 = (GameImpl)game;
game2.showMenu();


je to takto korektne alebo "myslim zle"? lebo takto mam riesenych viac veci napr. aj prikaz PRIKAZY :)

a este jedna vec, PMD hlasi ze "   Pretypujte deklaráciu (namiesto typu 'ArrayList' použite rozhranie, ktoré tento typ implementuje)." pri deklaracii ArrayList<Command>, ale v scenari je pouzitie prave tohoto nie? ci nerozumiem chybe? :whacko:

Agamemnon

Quote from: swety on  20.11.2011, 21:11:28
rozhrania v kniznici Jonesa asi nemozeme menit, ze?

ak si do GameImpl doplnim nejake metody ktore v Game nie su (napr. zobrazenie menu), aj tak ich nemozem volat napr. v Quit.execute(), ked je tam parametrom objekt typu Game.

chcel som to riesit pretypovanim a teda nieco v zmysle
(GameImpl)game.showMenu();

ale zjavne takto to nefunguje, takze to mam nakoniec riesene cez dalsiu premennu
GameImpl game2 = (GameImpl)game;
game2.showMenu();


je to takto korektne alebo "myslim zle"? lebo takto mam riesenych viac veci napr. aj prikaz PRIKAZY :)

a este jedna vec, PMD hlasi ze "   Pretypujte deklaráciu (namiesto typu 'ArrayList' použite rozhranie, ktoré tento typ implementuje)." pri deklaracii ArrayList<Command>, ale v scenari je pouzitie prave tohoto nie? ci nerozumiem chybe? :whacko:

- rozhrania, ktoré ste dostali, meniť nemôžete
- doplniť do implementácie môžeš čokoľvek...
- funguje to, pokiaľ je to objekt toho typu, ktorý danú vec implementuje
- pretypovanie máš zle:

((GameImpl)game).showMenu();

- to s premennou zmaž - použi pretypovanie

- posledné nvm - nepastol si kód, ktorý ti hlási tú chybu + s javou nerobím, a nedokážem po pamäti povedať, čo je ArrayList (abstraktná trieda? trieda? rozhranie?)... a nechce sa im googliť... takže ak mi povieš, čo sú dané veci a ak pastneš chybný kód, tak ti poviem, čo je zle... :) teoreticky ten kód stačí, zvyšok si možno domyslím...
All code is crap.

42

swety

kod je v triede ParserImpl, ArrayList je importovany z java.util.ArrayList a chyba je na riadku s deklaraciou premennej tohto typu teda
private ArrayList<Command> commands;
kde to neskor pouzivam ako
this.commands = new ArrayList<Command>();
commands.add(new Version());

a postupne pridavanie prikazov do listu, funguje vsetko OK iba ten PMD upozornuje... ale mozno to nie je to o com sa pise v scenari robil som to prvykrat a iba nasledoval chyby a upozornenia NetBeansu a teda bol som stastny ze to funguje  :D

za tie zatvorky v pretypovani vdaka  :beer1:

Agamemnon

Quote from: swety on  21.11.2011, 00:45:58
kod je v triede ParserImpl, ArrayList je importovany z java.util.ArrayList a chyba je na riadku s deklaraciou premennej tohto typu teda
private ArrayList<Command> commands;
kde to neskor pouzivam ako
this.commands = new ArrayList<Command>();
commands.add(new Version());

a postupne pridavanie prikazov do listu, funguje vsetko OK iba ten PMD upozornuje... ale mozno to nie je to o com sa pise v scenari robil som to prvykrat a iba nasledoval chyby a upozornenia NetBeansu a teda bol som stastny ze to funguje  :D

za tie zatvorky v pretypovani vdaka  :beer1:

aha, ono to po tebe chce, aby si premenné nedeklaroval ako konkrétnu triedu, ale ako abstratknú, alebo ako interface... v tomto prípade to znamená asi toľko:

ArrayList<Command> je konkrétna trieda...
ArrayList je interface (alebo abstr. trieda, ale to je jedno v tomto prípade)...

takže ono to chce po tebe niečo také:


// deklaruješ interace/abstr. triedu
private ArrayList commands;

...

// priradzuješ konkrétnu implementáciu
commands = new ArrayList<Command>();
All code is crap.

42

sulo

Quote from: Agamemnon on  21.11.2011, 01:06:46
ArrayList je interface (alebo abstr. trieda, ale to je jedno v tomto prípade)...

ArrayList nie je rozhranie ani abstraktná trieda, ale niečo ako náhrada zápisu ArrayList<Object>.

PMD chce, aby bola premenná deklarovaná pomocou rozhrania List.

private List<Command> commands;

Priradenie implementácie je už potom tak, ako bolo spomenuté.

commands = new ArrayList<Command>();

Agamemnon

Quote from: sulo on  21.11.2011, 01:57:02
Quote from: Agamemnon on  21.11.2011, 01:06:46
ArrayList je interface (alebo abstr. trieda, ale to je jedno v tomto prípade)...

ArrayList nie je rozhranie ani abstraktná trieda, ale niečo ako náhrada zápisu ArrayList<Object>.

PMD chce, aby bola premenná deklarovaná pomocou rozhrania List.

private List<Command> commands;

Priradenie implementácie je už potom tak, ako bolo spomenuté.

commands = new ArrayList<Command>();

dokonca... vďaka za opravu :)
All code is crap.

42

matus217

Nevie mi niekto poradit ? Mam vsetko co mame mat doteraz hotove, akurat sa trapim s tou PMD kontrolou ktora mi stale robi bordel. Mam Parser a v nom analyzujem zadany prikaz. Na zaklade toho tam mam tusim 2 podmienky a tie returnuju ten dany prikaz ktory naslo. Ak nic nenajde tak za cyklom ktory prechadza prikazy mam return null. Problem je ze PMD vypisuje, ze return by mal byt iba jeden, a ja mam 3. Ako by sa to dalo upravit ? Mam to vobec riesit alebo to mam ignorovat ? Vdaka.