Nämä toiset harjoitukset ovat hyvä testi niille, jotka ovat suorittaneet ohjelmointikurssin jollakin muulla kielellä kuin Javalla tai Ohjelmoinnin perusteet -kurssin suorituksesta on jo aikaa. Tämän verran siis Javaa oikeastaan on osattava jo ennen tätä kurssia! Eivät nämä tehtävät toki ihan helppoja ole Ohjelmoinnin perusteet -kurssin juuri suorittaneillekaan!
Luokan Opiskelija määrittely alkaa seuraavasti:
public class Opiskelija { private String etunimi; private String sukunimi; private int koepisteet; // saa olla vain 0-50 private int harjoituspisteet; // saa olla vain 0-10 public Opiskelija(String etunimi, String sukunimi) { this.etunimi = etunimi; this.sukunimi = sukunimi; this.koepisteet = 0; this.harjoituspisteet = 0; } //--------------------------- public String getEtunimi() { return this.etunimi; } public String getSukunimi() { return this.sukunimi; } public int getPistesaalis() { return this.koepisteet + this.harjoituspisteet; } //--------------------------- ...Täydennä luokkaa metodein
0-29 30-34 35-39 40-44 45-49 50-60 0 1 2 3 4 5
Voit ohjelmoida luokkaan muitakin hyödyllisiä metodeita.
Havainnollista Opiskelija-olioiden käyttötapaa luokkaan sijoitettavalla pääohjelmalla.
Huom: Asettavat ja ottavat aksessorit on nimetty Javan omassa kalustossa hyvin johdomukaisesti etuliitteillä "set" ja "get", esim. setValue, getValue. Asettavalle aksessorille luonteva suomalainen nimeämistapa olisi asetaArvo, mutta hyvää ottavan aksessorin nimeä on vaikeampi keksiä: otaArvo, annaArvo, haeArvo, ... Mikään noista ei ole kovin hyvä. Tässä tehtävässä käytetty englannin ja suomen sekoittaminenkin voi jotakuta häiritä. Pohdi asiaa. Mikä olisi mielestäsi paras ja selkein tapa?
Käytetään edellisen tehtävän luokkaa: Ohjelmarivi
Opiskelija[] opiskelijat = new Opiskelija[9];asettaa muuttujan arvoksi yhdeksänalkioisen taulukon, jonka alkiot voivat saada arvokseen Opiskelija-olioita. Tämän jälkeen esimerkiksi lause
opiskelijat[6] = new Opiskelija("Pekka", "Puupää");asettaa taulukon seitsemännen alkion arvoksi sellaisen Opiskelija-olion, jolle
opiskelijat[6].getEtuimi()on arvoltaan "Pekka" ja
opiskelijat[6].getPistesaalis()on alkuarvoltaan 0
Laadi sovellus, joka pyytää opiskelijoiden tiedot ja tulostaa ne pistejärjestyksessä arvosanoineen. Saman pistemäärän saaneet opiskelijat tulostetaan "aakkosjärjestyksessä". Käytä järjestämisessä vertailun välineenä Opiskelija-luokan metodia compareTo. Toteuta tietojen kysely, järjestäminen ja tulostaminen yksityisinä luokkametodeina, "pääohjelman pikku apulaisina".
Tulostuksen ulkoasu on seuraavanlainen:
Tulos Nimi 5 50 Juonio, Jussi 5 50 Mainio, Matti 4 46 Vemmelsääri, Väiski 3 42 Ankka, Aku 3 42 Ankka, Taavi 3 40 Puupää, Pekka 2 39 Hirmuinen, Harald 1 31 Hopo, Hessu 0 15 Lipponen, Pekka
a) a = ++i; b) a = i++; c) a = --i; d) a = i--; e) a += i++; f) a *= ++i + i++; g) a -= i++ - --i; h) a -= (i++ - --a) + (++a + i--); i) a += (i += ++a) - (a -= i--); j) a += (a += a--) + (a = i = a++);Mitä mieltä olet tällaisesta ohjelmoinnista? Tämä tehtävä on kuin rokotus; sen on tarkoitus tuottaa "vasta-aineita", jotta tuollainen ohjelmointityyli ei pääsisi jatkossa vaivaamaan...