N÷rttitestin sisΣltΣmΣΣ tietoa pohdittaessa tulee mieleen, ettΣ mukanahan on yksi ihan aito tietorakenne. Sellaista on Java-ympΣrist÷ssΣ syytΣ kuvata luokalla. Tuumasta toimeen, eli polkaistaanpa pystyyn uusi luokka nimeltΣ Kysymys. Valitse File-valikosta toiminto New Class, ja tΣytΣ luokkavelhon kentΣt seuraavasti.
Ok-napin klikkauksella uusi luokka syntyy. LisΣΣ luokan sisΣΣn seuraavat kentΣt:
private String kysymys;
private String[] vaihtoehdot;
private int[] pisteet;
private int vastaus;
EnsimmΣistΣ nΣistΣ kΣytetΣΣn itse kysymyksen tekstin tallentamiseen, toinen on merkkijonotaulukko vaihtoehtoja varten, kolmas varastoi eri vaihtoehdoista saatavat pisteet ja neljΣs puolestaan sisΣltΣΣ tiedon siitΣ, monennenko vaihtoehdon kΣyttΣjΣ valitsi.
Seuraavaksi luodaan yksinkertainen muodostaja eli konstruktori, joka ottaa parametreikseen kysymyksen tekstin ja vaihtoehtojen mΣΣrΣn. NΣiden perusteella alustetaan tarvittavat taulukot (vaihtoehdot ja pisteet).
public Kysymys(String kysymys,int vaihtoehtoja) {
this.kysymys=kysymys;
this.vaihtoehdot=new String[vaihtoehtoja];
this.pisteet=new int[vaihtoehtoja];
}
Konstruktorin lisΣksi tΣrkeΣ metodi on lisaaVaihtoehto( ), joka liittΣΣ kysymykseen uuden vaihtoehdon. EnsimmΣinen parametri on vaihtoehdon teksti ja toinen siitΣ saatava pistemΣΣrΣ. Itse metodin koodi on seuraavanlainen:
public void lisaaVaihtoehto(String vaihtoehto,int pisteet) {
for(int n=0;n if (this.vaihtoehdot[n]==null) {
this.vaihtoehdot[n]=vaihtoehto;
this.pisteet[n]=pisteet;
return;
}
}
Metodissa kΣydΣΣn lΣpi vaihdoehdot-taulukkoa, kunnes t÷rmΣtΣΣn tyhjΣΣn (toistaiseksi asettamattomaan) arvoon eli nulliin. Kun se l÷ytyy, sijoitetaan taulukon soluun vaihtoehdon teksti ja pisteet-taulukon vastaavaan soluun vaihtoehdosta saatava pistemΣΣrΣ.
Kuten aiemmin huomattiin, kΣytΣnn÷ssΣ kaikki metodit olivat tyyppiΣ private eli yksityisiΣ, eikΣ niihin pΣΣse kΣsiksi suoraan. TΣmΣn vuoksi tarvitaan joukko ns. aksessorimetodeita, joiden avulla suojattujen kenttien arvoja voi kΣsitellΣ.
public String haeKysymys() { return this.kysymys; }
public int haeVaihtoehtojenMaara() { return this.vaihtoehdot.length; }
public String haeVaihtoehto(int n) { return this.vaihtoehdot[n]; }
public void vastaa(int vastaus) { this.vastaus=vastaus; }
public int haePisteet() { return this.pisteet[this.vastaus]; }
EnsimmΣiset kolme metodia palauttavat vain yksinkertaisesti kysytyt asiat: erityistΣ huomiota kannattaa kiinnittΣΣ toiseen, joka siis palauttaa vaihtoehdot-taulukon pituuden eli alkioiden lukumΣΣrΣn. NeljΣs metodi asettaa kΣyttΣjΣn vastauksen, ja viides palauttaa valitun vastauksen pistemΣΣrΣn. haePisteet()-metodia ei pidΣ kutsua ennen kuin kysymyksen vastaus on tallennettu vastaa()-metodin kutsulla, sillΣ muutoin haePisteet()-rungossa esiintyvΣ this.vastaus-kenttΣ ei ole vielΣ saanut haluttua arvoa.