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

Kun kysymykset on ladattu, on aika kΣydΣ ohjelman perustoiminnan kimppuun. lataaKysymykset()-metodi kutsui naytaKysymys()-metodia, jonka ohjelmoimme seuraavaksi. Aloittakaamme heti edellisen perΣΣn:

private void naytaKysymys(int kys) {
  Kysymys k = (Kysymys)kysymykset.elementAt(kys);
  labelKysymys.setText((kys+1)+"/"+kysymykset.size()+": "+k.haeKysymys());
  for(int n=0;n  naytettyKysymys=kys;
  ryhma1.setSelectedCheckbox(null);
}

Metodin koodin ensimmΣisellΣ rivillΣ haetaan vektorin elementAt()-metodilla se elementti, jonka jΣrjestysnumero on parametrissa kys. Muista, ettΣ taulukointi alkaa my÷s vektorissa nollasta: ensimmΣinen kysymys on siis 0! Seuraavaksi asetetaan kysymyksen otsikko ja vaihtoehdot silmukassa: tΣssΣ on huomattavan nΣppΣrΣΣ, ettΣ kΣytettΣvissΣ on Checkbox[]-taulukko vaihtoehdot, joka voidaan kΣydΣ lΣpi silmukalla.

Seuraavaksi asetetaan naytettyKysymys-muuttujaan tΣmΣnhetkisen kysymyksen numero, jotta muut metodit saavat sen tietoonsa my÷hemmin. Viimeinen rivi poistaa ryhma1:sta valinnat, jolloin edellisen kysymyksen valinta-arvot eivΣt toistu seuraavaan. TΣmΣn jΣlkeen ohjelman kontrolli jΣtetΣΣn normaalisti tapahtumien varaan: mitΣΣn koodia ei suoriteta kunnes kΣyttΣjΣ tekee jotain.


Vastaa-nappi kΣytt÷÷n

HyppΣΣ takaisin Designer-tilaan ja tuplaklikkaa Vastaa-nappia. JBuilder muodostaa uuden tapahtumankΣsittelijΣn buttonVastaa_actionPerformed. Kirjoitetaan seuraavaksi koodia sen kΣsittelyyn.

void buttonVastaa_actionPerformed(ActionEvent e) {
  for(int n=0;n  if (ryhma1.getSelectedCheckbox()==vaihtoehdot[n]) {
    vastaa(n);

Kun kΣyttΣjΣ klikkaa Vastaa-nappia, kΣydΣΣn vastausvaihtoehdot lΣpi. Jos jokin niistΣ on ruksittu, on se tehtΣvΣn vastaus: tΣll÷in kutsutaan metodia vastaa, joka saa parametrikseen vastausvaihtoehdon numeron (0-3). Vastaa-metodin tehtΣvΣksi jΣΣ yksinkertaisesti kirjata tehty vastaus kysymysolioon. Se onnistuu seuraavalla koodilla, joka kannattaa liittΣΣ tapahtumankΣsittelijΣn rungon ylΣpuolelle:

private void vastaa(int vastaus) {
  Kysymys k = (Kysymys)kysymykset.elementAt(naytettyKysymys);
  k.vastaa(vastaus);
}

EnsimmΣinen rivi etsii kysymykset-taulukosta tΣmΣnhetkisen kysymyksen muuttujaan k, ja toinen rivi kutsuu Kysymys-luokkaan laatimaamme vastaa()-metodia. NΣin kysymys merkitΣΣn vastatuksi, ja sieltΣ voidaan my÷hemmin kaivaa esille vastauksen tuomat pisteet.

Kun vastausasia on kΣsitelty, voidaan jatkaa tapahtumankΣsittelijΣn ohjelmointia. Kun tehtΣvΣΣn on vastattu onnistuneesti, on aika siirtyΣ seuraavaan kysymykseen. Kirjoitetaan seuraava koodi vastaa(n)-rivin jΣlkeen:

        if (!naytaSeuraava()) {
          naytaTulos();
          buttonVastaa.setEnabled(false);
      }
      return;
    }
  }

Luodaan metodi naytaSeuraava(), joka palauttaa totuusarvon false, mikΣli uusia kysymyksiΣ ei enempΣΣ ole. Jos uusi kysymys l÷ytyy, metodi nΣyttΣΣ sen ja palauttaa arvon true. Kysymysten loputtua nΣytetΣΣn tulostiedot metodilla naytaTulos(). Samalla muutetaan vastausnappulan tilaa siten, ettei sitΣ voi enΣΣ klikata: setEnabled(false). Uuden testin tehdΣkseen kΣyttΣjΣn on ladattava sivu uudelleen.

Metodin naytaSeuraava() koodi on seuraavanlainen:


  private boolean naytaSeuraava() {
  if (naytettyKysymys==kysymykset.size()-1) return false;
    naytaKysymys(naytettyKysymys+1);
    return true;
  }

Logiikka on melko suoraviivainen. Kannattaa kuitenkin huomata, ettΣ kun tarkistetaan, onko nΣytillΣ vektorin viimeinen kysymys, tΣytyy vektorin elementtimΣΣrΣn palauttavan size()-metodin arvosta vΣhentΣΣ yksi, koska se todella palauttaa elementtien lukumΣΣrΣn; kuitenkin esimerkiksi kolmen kysymyksen vektorissa viimeisen kysymyksen numero on 2.

naytaTulos() puolestaan hoituu seuraavanlaisella koodilla:

  private void naytaTulos() {
    int pisteet=0;
    for(int n=0;n      pisteet+=((Kysymys)kysymykset.elementAt(n)).haePisteet();
    labelKysymys.setText("Sait " + pisteet + " pistettΣ!");
    for(int n=0;n  }

Ratkaisu on melko yksinkertainen, sillΣ koodi vain asettaa kysymyksen nΣyttΣvΣn Labelin sisΣll÷ksi pistemΣΣrΣstΣ kertovan tekstin. SitΣ ennen pisteet lasketaan kΣymΣllΣ vektorin kysymysoliot yksi kerrallaan lΣpi ja kutsumalla kunnkin haePisteet-metodia. Lopuksi vaihtoehdot vielΣ kytketΣΣn pois pΣΣltΣ, sillΣ ilman kysymystΣ niillΣ ei my÷skΣΣn tee mitΣΣn.

EnΣΣ vain kysymykset puuttuvat. Kirjoita niitΣ tekstitiedostoon ja tallenna se samaan hakemistoon testi-HTML:n kanssa, kΣΣnnΣ appletti ja voilß! N÷rttitestisi on kunnossa. Sitten voitkin alkaa miettimΣΣn, miten ohjelmaa voisi parantaa. Joitain vinkkejΣ saat seuraavalta sivulta, ja lisΣΣ keksii itsekin.

  «  1  2  3  4  5  6  »