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

Compare with Current View Page History

« Previous Version 3 Next »

Denne oppgaven handler om en FeatureList-klasse, som representerer en såkalt feature vector. Dette er enkelt sagt er et sett med ord/navn med hvert sitt tilhørende (desimal)tall.

Bakgrunn

En feature vector (norsk: egenskapsvektor?) knytter et sett med navngitte "dimensjoner" til hvert sitt (desimal)tall, slik at en kombinasjon av egenskaper kan representeres som et punkt i et N-dimensjonalt rom. En slik vektor brukes i mange anvendelser, f.eks. til å representere evner. En figur i et spill kan f.eks. ha tallverdier for kløkt, smidighet, utholdenhet osv., tilsvarende evnevektoren (kløkt: 10, smidighet: 15, utholdenhet: 5). Hvis figuren utfører visse (trenings)oppgaver, så vil evnene endre/utvikle seg. Trikset da er å knytter en tilsvarende evnevektor til oppgaven, så en kan beregne figurens nye evneprofil ved å legge samme de to vektorene: ny evnevektor = gammel evnevektor + oppgavevektor.

Slike vektorer brukes i mange fagområder for klassifisering og beregninger, og i denne oppgaven skal du lage en FeatureList-klasse som representerer og opererer på slike vektorer.

FeatureList-klassen

FeatureList-klassen har en del grunnleggende metoder for å hente ut informasjon om hvilke dimensjoner eller egenskapsnavn og verdier vektoren har. I tillegg har den en del metoder for å endre på innholdet, både legge til dimensjoner og verdier og endre eksisterende verdier:

Grunnleggende metoder:

  • FeatureList() - konstruktøren initialiserer objektet slik at det fra starten er helt tomt, dvs. uten egenskaper (navn og verdier).
  • boolean hasFeature(String featureName) - returnerer true dersom egenskapen (dimensjonen) med det gitt navnet finnes, og false ellers.
  • Collection<String> getFeatureNames() - returnere alle egenskapsnavnene (dimensjonene) på én gang.
  • double getFeatureVaue(String featureName) - returnerer verdien for den angitte egenskapen (dimensjonen). Hvis den angitte egenskapen ikke finnes, så kan programmet enten kræsje (utløse unntak) eller returnere 0.0, som er den (implisitte) verdien for manglende egenskaper.

I tillegg kan det være lurt å lage en toString()-metode, som returnerer en String på formen som er angitt over.

Metoder som endrer tilstanden:

  • void addFeature(String featureName, double value) - legger til egenskapen med det angitte navnet, dersom denne ikke finnes fra før. Hvis den finnes fra før, skal egenskapen ikke endres.

 

JExercise-testkode for denne oppgaven finner du her: objectstructures/FeatureListTest.java. jextest-koden finner du her: objectstructures/FeatureList.jextest.

.ex for bruk med Exercise-panelet finner du her: Card.ex.


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