000
28.11.2004, 00:40 Uhr
DerSchwarzeSchlumpf
|
hi (:
ich progge gerade mein 1. java programm mit events und hab da scheinbar ein "kleines" verständnisproblem. also, das grundprinzip von observer/observable ist mir ja eigentlich klar... . ABER! es gibt ein großes problem*g*
der sinn ist, dass ich eine "wörte-zähler"-funktion in ein programm implimentieren muss. wenn ich jetzt nach der reihe über die comand-line eingebe "star wars" "the return of star wars" soll er ausgeben: star: 2 wars: 2 the: 1 of: 1
von der idee her: ich hab ein objekt "wordindex" das das wort als string und die anzahl speichert. hab die nötigen methoden auch schon (set/get/word/count/decrease/proofIfExisting usw). es soll auch möglich sein, einzelne sätze wieder zu löschen (die gespeicherten löscht er mir schon nur jetzt muss er über einen event auch noch die einzelnn wörter runterzählen was ja eigentlich gleich wie das raufzählen funktioniern sollte). und ja es ist egal wenn jetzt bei einem wort 0 drinsteht und das noch in der liste ist (:
das problem ist aber, dass ich das wie erwähnt jetzt über events machen muss.
ich hab einen "WordIndexChangeEvent" gemacht. der schaut so aus:
C++: |
class WordsIndexChangeEvent { //die 2 möglichkeiten die passiern können public static final int ADD = 0; public static final int DELETE = 1;
//was passiert ist und das argument private int type_; private String arg_;
//Constructor, Get/Set Methoden udgl. };
|
Die Wörter speicher ich in diesem Objekt:
C++: |
class WordsIndex { private String word_; private int count_; //Methoden };
|
dann hab ich noch den Wrapper angelegt der die einzelnen WordsIndex in einer ArrayList speichert und darauf zugreifen kann
C++: |
class WordsIndexWrapper extends Observable { private ArrayList words_;
public WordsIndexWrapper() { words_ = new ArrayList(); }
public void output(); public boolean isWordExisting(String word); public void addNewWord(String word); public void addCount(String word); public int getCount(String word); };
|
und dann das was er tun soll wenn es passiert
C++: |
class WordsIndexModul implements Observer { public void update(Observable observable, Object arg) { WordsIndexWrapper words_index = (WordsIndexWrapper) observable; WordsIndexChangeEvent event = (WordsIndexChangeEvent) arg; switch(event.getType()) { case WordsIndexChangeEvent.ADD: { String word = (String) event.getArg(); boolean still_existing = words_index.isWordExisting(word); if(still_existing == true) { words_index.addCount(word); } else { words_index.addNewWord(word); } break; } case WordsIndexChangeEvent.DELETE: { String word = (String) event.getArg(); words_index.removeCount(word); break; } default: break; } } }
|
vom Verständnis her: ich generiere das change-event.DELETE wenn ich etwas lösche und das .ADD wenn ich eine linie hinzufüge - klar. aber ich hab jetzt stundenlang rumprobiert und er stürzt mir jedesmal ab wenn ich bei update() den 1. Cast auf WordsIndexWrapper mache.
Ich glaub ich hab nicht wirklich verstanden, wer jetzt wen überwacht. Der Wrapper überwacht das Input-Modul, oder? Und wenn ich einen Input mache generier ich dort das Event, mach notify(event) und es springt ins update rein, oder? Aber wie binde ich dann das WordsIndexModul (wo die einzelnen WordIndex-Objekte gespeichert sind) da ein? Das müsste ich doch als Argument übergeben, aber wie?
Hat jemand eine Hilfe? Wär echt super... (:
lg chris
EDIT: was mir gerade eingefallen ist: klar, als string-argument wird her die komplette eingabe übergeben, wo ich noch in einer for-schleife die einzelnen tokens rausfiltern muss, aber das ist nicht das problem (: Dieser Post wurde am 28.11.2004 um 00:45 Uhr von DerSchwarzeSchlumpf editiert. |