JBuilder Käyttö Nörttitesti
Asennus Ikälaskuri Linkit
  «  1  2  3  4  5  6  »  
 
Kysymyksen prototyyppi

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.

Näin yksinkertaisella koodilla tallennetaan yksi kysymys turvallisesti ja toimivasti. Kun tämä apuluokka on kunnossa, on itse applettia helppo lähteä toteuttamaan.

  «  1  2  3  4  5  6  »