...
- void push(double) - legg argumentet på toppen av stacken.
- double pop() - returner verdien på toppen av stacken. Verdien skal også fjernes fra stacken. Dersom stacken er tom, så skal Double.NaN returneres.
- double peek(int) - returner verdien i stacken som står på plassen gitt i argumentet, telt fra toppen. Det vil si, peek(0) skal returnere verdien på toppen av stacken, peek(1) skal returnere verdien nest øverst i stacken osv. Verdien skal ikke fjernes av stacken. Dersom det er for få elementer på stacken, så skal Double.NaN returneres.
- int getSize() - returner antallet elementer i stacken.
- void performOperation(char) - utfør den angitte operasjonen på de to øverste verdiene i stacken. De to verdiene skal fjernes fra stacken og resultatet skal legges øverst. Bruk eksisterende metoder for å utføre dette der det er mulig.
Metoden må støtte '+' (pluss), '-' (minus), '*' (multiplikasjon) og '/' (divisjon), men kan også støtte andre operatorer, f.eks. '~' (swap) for å bytte de to øverste operandene, 'p' eller 'π' (pi) for å legge pi på stacken (bruker ingen operander), '|' (absolutt-verdi, bruker én operand). Prøv å håndtere manglende operander på en måte som gir mening for operasjonen.
Exercise-panelet
Bruk av Exercise-panelet er obligatorisk for denne øvingen. Du må ha panelet åpent med RPNCalc.ex-filen (tests > encapsulation > RPNCalc.ex) i før du begynner med oppgaven. For mer informasjon/hjelp, se nederst på hovedsiden for Øving 3.
Del 1 -
...
Tilstandsdiagram
Tegn objekttilstandsdiagram for en tenkt bruk av RPNCalc-klassen. Velg selv passende start-tilstand og sekvens av kall.
Del 2 - Java-kode
...
Lag en main-metode, hvor du leser inn tester sekvenser av operander og operatorer fra tastaturet, og kaller henholdsvis push og performOperation-metodene på et RPNCalc-objekt og skriver ut stacken. Test RPNCalc-klassen og sjekk at oppførselen stemmer med tilstandsdiagrammet.
Del 3 -
...
Teori
Til nå har det blitt spesifisert at peek()- og pop()-metodene skal returnere Double.NaN hvis stacken er tom. Alternativet er å utløse et unntak.
...
- Hva vil tilsvarende verdi for manglende operand for '*'-operasjonen (multiplikasjon) være? Hva med for '/' (divisjon)?
- Hvordan kan du endre (evt. har du endret) API-et grensesnittet for stack-operasjonene for å gjøre implementasjonen av disse enklere?
- Også her er et alternativ å utløse unntak. Hva tror du om det?
Del 4 - JavaFX
Kjør den tilhørende JavaFX-applikasjonen (kjør RPNCalc.fxml som FXML Application) og observer hva som skjer. Åpne RPNCalcController.java og finn ut hvor RPNCalc-klassen din blir brukt, og kommenter hva som skjer med den. Det er ikke et krav at du forstår resten av koden i RPNCalcController, du skal kun forklare hvordan klassen din blir brukt.
...
Testkode for denne oppgaven finner du her: encapsulation/RPNCalcTest.java. Original-koden (jextest) finner du her: encapsulation/RPNCalc.jextest.
...