Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Excerpt

I denne oppgaven skal man implementere en enkel kalkulator. Kalkulatoren skal holde oversikt over to operander og en operator, samt utføre matematiske operasjoner.

Tilstanden i Calculator-objekter er som følger:

  • firstOperand - et desimaltall som skal brukes som første operand i den matematiske operasjonen.
  • secondOperand - et desimaltall som skal brukes som andre operand i den matematiske operasjonen.
  • operator - en char som representerer den matematiske operatoren, for eksempel '+', '-'. '*', '/', '%', ...

Calculator-klassen må inneholde følgende metoder:

  • void setFirstOperand(double) - lagre den angitte argumentverdien som første operand.
  • void setSecondOperand(double) - lagre den angitte argumentverdien som andre operand.
  • void setOperator(char) - lagre den angitte argumentverdien som operator.
  • double calculateResult() - beregn den matematiske operasjonen ved å anvende operatoren (lagret i operator) på de to operandene (firstOperand og secondOperand) og returner resultatet.

Alle metodene ovenfor må kunne håndtere ulovlige argumentverdier, for eksempel ikke-eksisterende matematiske operasjonstegn. Tenk også over at det ikke går an å dele på null o.l.

Del 1 - tilstandsdiagram

Tegn et objekttilstandsdiagram for en tenkt bruk av Calculator-klassen. Velg selv en passende start-tilstand for Calculator-objektet og sekvens av kall.

Del 2 - Java-kode

Skriv Java-kode for Calculator-klassen med oppførsel som er beskrevet over.

Lag en passende toString()-metode og et hovedprogram, slik at du kan sjekke at oppførselen stemmer med tilstandsdiagrammet (bruk samme start-tilstand og sekvens av kall).

Del 3 - Enkle beregninger/uttrykk

Legg til følgende metode:

  • void calculateAndSetFirstOperand() - beregn den matematiske operasjonen og sett firstOperand til resultatet. Bruke eksisterende metoder der dette er mulig.

La hovedprogrammet lese uttrykk fra tastaturet (altså System.in) med alternerende operand og operator. E.g. dersom brukeren skriver inn 1 + 2 * 3 - 2, så regner kalkulatoren først ut 1 + 2 (=3), så 3 * 3 (=9) og så 9 - 2 (=7). Hvert mellomresultatat og sluttresultatet (7) havner i firstOperand. Du trenger altså ikke å tenke på operator-prioritet.

JExercise-testkode for denne oppgaven finner du her: stateandbehavior/CalculatorTest.java.

Include Page
Bunntekst for JExercise-oppgaver
Bunntekst for JExercise-oppgaver

Ekstraoppgave

  • Hvordan vil du håndtere operator-prioritet (multiplikasjon skal utføres før addisjon osv.)?