You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Oppgaven handler om en Stack-klasse, som skal lagre tilfeldige tekster i datastrukturen stack.

I denne oppgaven skal vi lagre tall i en datastruktur som heter stack. Java har en egen implementasjon av datastrukturen (java.util.Stack), men for å få en god forståelse av hvordan en stack fungerer, skal vi implementere den selv. Stack brukes ofte i programmering og det er gunstig å lære seg den tidlig. Mer informasjon om stack-datastrukturen: http://en.wikipedia.org/wiki/Stack_data_structure

Vi skal lage to klasser, Stack og RandomIntGenerator, som skal gi oss tilfeldige tall å lagre i stacken.

Tilstanden i Stack-objekter er som følger:

Stack-klassen din skal ha følgende metoder:

  • void push(String) - legger argumentet på toppen av stacken.
  • String pop() - returner og fjerner verdien på toppen av stacken. Returner null dersom stacken er tom.
  • String peek(int) - returner verdien i stacken som står på plassen gitt i argumentet, telt fra toppen. Det vil si, peek(0) skal returnere veriden på toppen av stacken, peek(1) skal returnere verdien nest øverst i stacken osv. Verdien skal ikke fjernes av stacken. Returner null dersom argumentet er negativt eller for stort.
  • int getSize() - returner antallet elementer i stacken.

RandomStringGenerator skal generere tilfeldige String-objekter. For å få til dette kan du bruke Random-klassen i java.util-pakka og metodene nextInt() og nextInt(int)http://docs.oracle.com/javase/6/docs/api/java/util/Random.html.

Tilstanden i RandomStringGenerator-objekter velger du selv, men det er naturlig å ha et felt som inneholder et Random-objekt. Du velger selv strategien for å lage tilfeldige tekster. F.eks. kan du bygge opp en String med tilfeldig lengde og tilfeldige bokstaver, du prøve å lage tilfeldige ord ved å veksle mellom vokaler og konsonanter, du kan kan sette sammen en tilfeldig sekvens av ferdiglagde ord-deler osv.

RandomStringGenerator-klassen skal ha følgende metode(r):

  • String getRandomString() - returner et tilfeldig String-objekt.

Del 1 - tilstandsdiagram

Tegn objekttilstandsdiagram for en tenkt bruk av Stack-klassen og RandomStringGenerator-klassen. Velg selv passende start-tilstand og sekvens av kall.

Del 2 - Java-kode

Skriv Java-kode for Stack-klassen og RandomStringGenerator-klassen med oppførsel som er beskrevet over.

Lag en passende toString()-metode for Stack-klassen og et hovedprogram, som får tilfeldige String-objekter fra et RandomStringGenerator-objekt. Bruk disse tallene til å teste Stack-klassen og sjekk at oppførselen stemmer med tilstandsdiagrammet.

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


JExercise lar deg sjekke din egen kode vha. forhåndslagde JUnit-tester og JExercise-panelet

Bruk av JExercise:

  1. Sørg for at jexercise-standalone.jar er lagt til i ditt prosjekts Build Path. Dette må gjøres hver gang du oppretter et nytt prosjekt, og det er derfor lurt å gjenbruke samme prosjekt til alle oppgaver.
  2. JExercise-tillegget må være installert. Installer tillegget fra følgende oppdateringsadresse: http://folk.ntnu.no/hal/dev/updatesite.
  3. Åpne JExercise-panelet via Window -> Show View -> Other, og navigere deg fram til JExercise i vinduet som kommer opp, velge det og klikke OK.
  4. Klikke og dra oppgavens testklasse, <oppgavenavn>Test.java fra pakkeoversikten og slippe den i JExercise panelet. 
  5. Testene kan så kjøres ved å dobbeltklikke på testen som ønskes kjørt.

Ved trøbbel, se først om du finner løsningen i Løsninger på trøbbel med JExercise.

Unknown macro: {html}

Twitre gjerne om oppgaven når du er ferdig: <a href="https://twitter.com/share" class="twitter-share-button" data-hashtags="jexercise">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

  • No labels