- 1.
- Mitä seuraava ohjelma tulostaa? Tutki PÖYTÄTESTIN
avulla! Merkitse pöytätestiin myös milloin mikäkin
olio muuttuu roskaksi. (6p)
/**
* Tutki päytätestin avulla mitä ohjelma tulostaa.
* Merkitse myös milloin mikäkin olio muuttuu "roskaksi".
* @author Vesa Lappalainen
* @version 1.0, 09.03.2003
*/
public class VKseko02 {
/* 09 */ public static class Sorsa {
/* 10 */ private int vari;
/* 11 */ private String nimi;
/* 12 */
/* 13 */ public Sorsa() { nimi = "Repe"; vari = 0; }
/* 14 */ public Sorsa(StringBuffer inimi) {
/* 15 */ inimi.append("Aku"); vari = 2;
/* 16 */ }
/* 17 */
/* 18 */
/* 19 */
/* 20 */ void hyppaa(Sorsa apu) {
/* 21 */ apu.nimi = "Senkin Sorsa";
/* 22 */ vari++;
/* 23 */ }
/* 24 */ void tulosta() {
/* 25 */ vari++;
/* 26 */ System.out.println(nimi + " " + vari);
/* 27 */ }
/* 28 */ }
/* 29 */
/* 30 */ public static void main(String[] args)
/* 31 */ {
/* 32 */ StringBuffer nimi = new StringBuffer("Väiski");
/* 33 */ Sorsa aku = new Sorsa(nimi);
/* 34 */ System.out.println(nimi);
/* 35 */ aku.tulosta();
/* 36 */ {
/* 37 */ Sorsa repe = new Sorsa();
/* 38 */ repe.tulosta();
/* 39 */ aku.hyppaa(repe);
/* 40 */ aku.tulosta();
/* 41 */ aku = repe;
/* 42 */ }
/* 43 */ aku.tulosta();
/* 44 */ }
}
- 2.
- Kirjoita funktio pisin_nouseva, joka palauttaa Javan
merkkijonosta pisimmän pelkästään kasvavan (samoja tai
aakkosissa aina edeltäjäänsä "suurempia" merkkejä sisältävän) merkkijoukon pituuden
Esimerkki:
"abajiuxac" => 3 (eli iux)
"kissa" => 3 (eli iss)
- a)
- Kirjoita ensin algoritmi, saat jakaa ongelman pienempiinkin osiin :-).(2p)
- b)
- Toteuta em. algorimi Java -kielellä.(4p)
- 3.
- Kirjoita ohjelma (kieli vapaa), joka lukee tiedostoa,
jossa on välilyönnein toisistaan erotettuja lukuja ja
sanoja, ja kopioi toiseen tiedostoon ne rivit, joiden
alussa on luku, joka on suurempi kuin 30.(6p)
Tiedostosta: tulee tiedosto:
-----------------------------------------------------
33 hiljaa 1 hiipii 33 hiljaa 1 hiipii
hyvä 33 tulee 36 1 3 5 55
36 1 3 5 55
nyt 33 riittää
-----------------------------------------------------
- 4.
- Kirjoita luokka Ehdokas, jota voidaan käyttää kuten
seuraavassa pääohjelmassa. Kirjoitettava koko luokka
(attribuutit, kaikki metodit yms.)(6p)
public static void main(String[] args) {
Ehdokas ehd1 = new Ehdokas(100000.0,0),ehd2 = new Ehdokas(20000.0,300);
ehd1.tulosta(); // Tulostaa: Rahaa 100000, ääniä 0
ehd2.tulosta(); // Tulostaa: Rahaa 20000, ääniä 300
ehd1.osta(200,100.0); // Ostaa 200 ääntä, 100 mk/kpl
ehd1.tulosta(); // Tulostaa: Rahaa 80000, ääniä 200
boolean onnistui = ehd2.osta(300,100);
if ( !onnistui ) System.out.println("Rahat ei riitä :-)");
ehd2.tulosta(); // Tulostaa: Rahaa 20000, ääniä 300
if ( ehd1.compareTo(ehd2) > 0 ) System.out.println("Ehdokas 1 voitti!");
if ( ehd1.compareTo(ehd2) < 0 ) System.out.println("Ehdokas 2 voitti!");
if ( ehd1.compareTo(ehd2) == 0 ) System.out.println("Taspeli!");
// Vertailu tehdään äänimäärien perusteella.
// Esimerkissä tulostuu : Ehdokas 2 voitti!
}
- 5.
- Javan Integer-luokka on muuttumaton (immutable), eli
kun kokonaisluku on luotu, sitä ei voi enää muuttaa.
Tee oma luokka Int, jonka arvo voi muuttaakin (mutable)
ja muuta esimerkki dyna/ArrayListMalli.java
sellaiseksi, että tietorakenteessa oleva luku voidaan
muuttaa kutsulla:
((Int)luvut.get(1)).set(4);
-
- Luokkaan Int pitää tehdä sen verran metodeja, että esimerkki dyna/ArrayListMalli.java toimii kun kaikki
Integer sanat muutetaan Int.
- 6*
- Tee aliohjelma
int poista(int taulukko[],int lkm,int n)
-
- joka poistaa taulukosta kaikki luvun n esiintymät.
int t[]={4,7,6,3,6,2};
int lkm=6;
lkm = poista(t,lkm,6); /* => t = {4,7,3,2}, lkm = 4 */
- 7*.
- Kirjoita dyna/Taulukko.java (ks.
moniste 16.3) taulukolle metodi public Object
clone(), jolla voidaan sijoittaa taulukkoon toinen
taulukko:
...
public static void main(String args[]) {
Taulukko luvut = new Taulukko(7);
luvut.lisaa(0); luvut.lisaa(2);
System.out.println(luvut);
Taulukko taul = (Taulukko)luvut.clone();
System.out.println(taul); // tulostaa saman kuin edellä
}
- 8.
- Kirjoita Taulukko -luokalle 6. tehtävää vastaava metodi poista. Mitä parametrejä tämä metodi tarvitsee?
- 9*.
- Pääteohjauksessa 2 piti kirjoittaa seuraava tiedosto:
000 En enää turhaan kirjoita!
001 En enää turhaan kirjoita!
002 En enää turhaan kirjoita!
003 En enää turhaan kirjoita!
...
099 En enää turhaan kirjoita!
-
- Tee nyt ohjelma, joka kirjoittaa tiedoston puolestasi.
Mitä ohjelma voisi kysellä käyttäjältä?
- B1-2
- Kirjoita Java-kieliset luokkamäärittelyt, joilla saat
loogisesti seuraavan näköiset rakenteet sekä kirjoita
vastaavien muuttujien määrittelyt ja metodi-kutsut jotta rakenteessa olisi samat tiedot kuin kuvassa:
+-------------+
| 7 |
| 3 |
| o------+----------------------------------------+
| o------+-----------------+ |
| o | | |
+------+------+ v |
| +--------------+ v
v +----->|Kassinen Katto| +-----+
+----------+ | |Katto | | 5 | 0
0 | o----+--------+ |3452 | +-----+
+----------+ | o------+------->| 9 | 1
1 | o----+--------+ +--------------+ +-----+
+----------+ +----->+-------------+ | 3 | 2
2 | o----+-------------->|Susi Sepe | +-----+
+----------+ |Takametsä | +------>| 2 | 3
3 | | |- | | +-----+
+----------+ | o-----+-+ | 1 | 4
4 | | +-------------+ +-----+
+----------+ | 0 | 5
5 | | +-----+
+----------+
6 | |
+----------+
G1. Kokeile kuinka paljon tehtävässä 5 auttaisi Java 1.5:n
uudet geneeriset ominaisuudet (ks.
dyna/ArrayListMalliGen.java )
Välikokeet 2003 ja 2004
Treenausta varten vuosien 2003 ja 2004 välikokeet ja niiden
vastaukset:
http://www.mit.jyu.fi/vesal/kurssit/ohjelmointi2003/tentti/
http://www.mit.jyu.fi/vesal/kurssit/ohjelmointi2004/tentti/