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

Compare with Current View Page History

« Previous Version 8 Next »

Denne oppgaven handler om sortering av TwitterAccount-objekter, ved bruk av grensesnittet Comparator. Oppgaven illustrerer hvordan man kan sortere objekter av samme klasse på ulike måter, ved hjelp av ulike implementasjoner av Comparator.

Vi tar i denne oppgaven utgangspunkt i TwitterAccount- og Tweet-klassen fra Twitter-oppgaven om objektstrukterer. Et TwitterAccount-objekt har et brukernavn, en liste over andre brukere som følges, en liste over brukere som følger denne brukeren (dette TwitterAccount-objektet), og en liste med tweets. Vi ønsker å kunne sortere TwitterAccount-objekter på tre ulike parametre:

  1. Brukernavn

  2. Antall følgere

  3. Antall tweets

Del 1

I denne delen av oppgaven skal du lage tre ulike implementasjoner av Comparator-grensesnittet. Comparator-grensesnittet inneholder én metode compare(Object o1, Object o2). Implementasjonen av denne metoden skal returnere:

  • et negativt tall dersom objektet o1 skal komme før objektet o2 i en sortert rekkefølge

  • et positivt tall dersom objektet o1 skal komme etter objektet o1 i en sortert rekkefølge

  • 0 om det er likegyldig hvilken rekkefølge objektene har (dvs. de er like hverandre for den parameteren/de paremetrene de sorteres på)

De tre klassene du skal lage er som følger:

  • UserNameComparator: sammenligner TwitterAccount-objektene på brukernavn, slik at brukeren “Apekatten” vil komme før “Bjørnen” som igjen vil komme før “Cameleonen” (dvs. leksikalsk rekkefølge - tenk rekkefølgene brukernavnene ville stått i et leksikon eller en ordbok)

  • FollowersCountComparator: sammenligner TwitterAccount-objektene på antall følgere, slik at brukeren med flest følgere havner først.

  • TweetsCountComparator: sammenligner TwitterAccount-objektene på antall tweets, slik at brukeren med flest tweets havner først.

Alle klassene skal implementere Comparator<TwitterAccount>.

Del 2

I denne delen av oppgaven skal du legge til en funksjon i TwitterAccount-klassen som lar deg hente ut en sortert versjon av følgerene til dette (this) TwitterAccount-objektet. Funksjonen du skal implementere er som følger:

  • getFollowers(Comparator<TwitterAccount>) - skal returnere en sortert kopi av følgere-listen til dette TwitterAccount-objektet. Objektene skal sorteres ved å bruke det Comparator-objektet som tas inn som parameter. Dersom parameteren er null skal du returnere den orginale (usorterte) versjonen av følgere-listen. Du skal ikke skrive din egen sorteringsalgoritme, men bruke Collections.sort-funksjonen fra java.utils-biblioteket. Merk at den opprinnelige følgere-listen skal være uforandret etter at denne funksjonen har blitt kjørt.

 

JExercise-testkode for oppgaven finner du her: 

Originalkode (jextest) kan du finne her:

 

Ekstraoppgave

Lag en klasse TwitterAccountComparator som implementerer Comparator<TwitterAccount> og sammenligner TwitterAccount-objekter på følgende måte:

  • TwitterAccount-objektet med flest følgere skal komme først.

  • Dersom to TwitterAccount-objekter har like mange følgere skal det TwitterAccount-objektet med flest tweets komme først.

  • Dersom to TwitterAccount-objekter har like mange følgere og tweets skal TwitterAccount-objektene sammenlignes på brukernavn.


 


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