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

Compare with Current View Page History

« Previous Version 14 Next »

Oppgaven omhandler en LineEditor-klasse, som håndterer data for redigering av en linje med tekst (altså tekst uten linjeskift).

LineEditor-klassen holder rede på en String-verdi og en tekstinnsettingsposisjon og har metoder for å redigere teksten. Tilstanden er som følger:

  • text (en String-verdi) - teksten
  • cursorIndex - heltall som angir hvor i teksten redigeringer vil skje

Klassen har metoder med følgende oppførsel:

  • void left() - flytter tekstinnsettingsposisjonen ett tegn til venstre (tilsvarende bruk av venstre piltast)
  • void right() - flytter tekstinnsettingsposisjonen ett tegn til høyre (tilsvarende bruk av høyre piltast)
  • void insertString(String s) - skyter teksten angitt av argumentet s inn i teksten på tekstinnsettingsposisjonen
  • void deleteLeft() - fjerner tegnet til venstre for tekstinnsettingsposisjonen
  • void deleteRight() - fjerner tegnet til venstre for tekstinnsettingsposisjonen

Del 1 - tilstandsdiagram

Tegn et tilstandsdiagram for en tenkt bruk av LineEditor-klassen, som dekker bruk av alle metodene.

For alle metodene bør du tenke på hva som er fornuftig oppførsel for spesielle tilfeller, f.eks. når tekstinnsettingsposisjonen er helt til venstre eller høyre. Tenk også på hva som bør skje med tekstinnsettingsposisjonen når teksten endres.

Del 2 - Java-kode

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

Lag en toString()-metode som viser teksten med tegnet '|' skutt inn på tekstinnsettingsposisjonen. Lag så et hovedprogram, slik at du kan sjekke at oppførselen stemmer med tilstandsdiagrammet (bruk samme start-tilstand og sekvens av kall).

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

Del 3 - frivillige utvidelser

  • Legg til metoden void insert(Object o), som skyter inn en tekstlig representasjon av objektet o som gis som argument.
  • Legg til metoden void left(int n), som flytter tekstinnsettingsposisjonen n tegn til venstre, og skriv om left() til å bruke denne. Hva bør skje dersom tekstinnsettingsposisjonen er mindre enn n?
  • Legg til metoden right(int n), som flytter tekstinnsettingsposisjonen n tegn til høyre, og skriv om right() til å bruke denne. Hva bør skje dersom det er færre enn n tegn til høyre for tekstinnsettingsposisjonen?
  • Utvid tilstanden og legg til metoder for å håndtere markering av region, tilsvarende bruk av shift og piltaster i en vanlig teksteditor. Husk at også de eksisterende metodene må endres til å håndtere dette riktig.

 


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