1. [max 1p/kohta]Kerro mitkä seuraavista väittämistä pitävät paikkansa ja mitkä eivät. a) Staattista metodia käytettäessä ei tarvitse luoda oliota. b) Java-kääntäjä havaitsee kaikki ohjelmassa olevat virheet. c) Reaalilukumuuttujaan ei voi tallettaa tarkasti kaikki mahdolliset reaaliluvut d) vertailussa mjono1==mjono2 tutkitaan viittaavatko muuttujat samaan olioon. e) Lausekkeen ! (a <= b && c <= d) arvo on sama kuin lausekkeen (a>b| | c>d). f) Metodissa paikallinen muuttuja näkyy vain ko. metodissa ja mainmetodissa. Valitse oikea vaihtoehto, vain yksi vaihtoehto per tehtävä (max 1p/kohta ellei toisin mainita). 1.1 Seuraavat ovat esimerkkejä Javan toistorakenteista: a) while, do ja for b) if, if-else ja switch c) loop ja while d) while, do, if, switch ja for 1.2 Mikä alla esiteltävistä lauseista Javan syntaksin mukainen: a) if(x>y) then(System.out.println("x")) b) if(x>y) System.out.println("x"); c) if(x>y); System.out.println("x") d) if(x>y) then System.out.println("x"); 1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä 1.4 Mitä tekee &&-operaattori a) Loogisen TAI-operaation b) Kasvattaa muuttujan arvoa yhdellä c) Loogisen JA-operaation d) && ei ole Javan operaattori 1.5 Mitä tekee operaattori || a) Loogisen OR-operaation b) Kasvattaa muuttujan arvoa yhdellä c) Loogisen AND-operaation d) || ei ole Javan operaattori 1.6 Mitä tekee ++-operaattori a) Loogisen OR-operaation b) Kasvattaa muuttujan arvoa yhdellä c) Loogisen AND-operaation d) ++ ei ole Javan operaattori 1.7 Montako "x"-merkiä alla oleva ohjelmanpätkä tulostaa? int i=0; while( i++ < 100) { System.out.println("x"); } a) 99 b) 100 c) 10 d) 0 1.8 Montako "x"-merkiä alla oleva ohjelmanpätkä tulostaa? int i=0; while(100 < i ) { System.out.println("x"); i++; } a) 99 b) 100 c) 101 d) 0 1.9 Montako "x"-merkkiä seuraava koodi tulostaa? int i=0; for( ;i <100;){ Systemout.println("x"); i++; } a) 99 b) 100 c) 101 d) 0 1.10 Montako "x"-merkiä alla oleva ohjelmanpätkä tulostaa for(int i=10; i < 100; i=i+10) System.out.println("x"); a) 9 b) 10 c) 11 d) 0 1.11 Montako "x"-merkiä alla oleva ohjelmanpätkä tulostaa for(int i=10; i < 100; i=i+10); System.out.println("x"); a) 9 b) 10 c) 11 d) 0 f) 1 1.12 Mihin taulukon elementtiin lause arr[9]=10; viittaa, kun taulukko on määritelty: int [] arr = new int [10]; a) taulukon arr yhdeksänteen elementtiin b) taulukon arr kymmenenteen elementtiin c) viittaus kohdistuu taulukon ulkopuolelle d) viittaus kohdistuu taulukon yhdenteentoista elementtiin 1.13 Mihin taulukon elementtiin lause arr[10]=10; viittaa, kun taulukko on määritelty: int [] arr = new int [10]; a) taulukon arr yhdeksänteen elementtiin b) taulukon arr kymmenenteen elementtiin c) viittaus kohdistuu taulukon ulkopuolelle 1.14 Mihin merkkijonon merkkiin lause mjono.charAt(9); viittaa, kun merkkijono on määritelty: String mjono ="0123456789"; a) merkkijonon yhdeksänteen merkkiin b) merkkijonon kymmenenteen merkkiin c) viittaus kohdistuu merkkijonon ulkopuolelle 1.15 Alla olevassa koodinosassa ohjelmoija on vahingossa laittanut puolipisteen for-lauseen otsikon loppuun. Mitä on tuloksena? System.out.print("A"); for ( int count = 1; count <= 3; count++ ); System.out.print("B"); System.out.print("C"); a) käännösaikainen virhe b) ikuinen silmukka c) tulostaa: ABC d) tulostaa: ABBC e) tulostaa: ABBBC 1.16 [max 2 p] Mikä vaihtoehdoista kuvaa alla olevan koodinpätkän toimintaa( 1p)? Perustelu (1 p). N on kokonaisluku > 0. int f=0; for(int i=N-1; i >=0; i--) if(a[i] < a[f]) f = i; a) Järjestää taulukon a N ensimmäistä komponenttia laskevaan suuruusjärjestykseen. b) Järjestää taulukon a N ensimmäistä komponenttia nousevaan suuruusjärjestykseen. c) Määrittää taulukon a N:n ensimmäisen alkion joukosta pienimmän alkion indeksin. d) Määrittää taulukon a N:n ensimmäisen alkion joukosta suurimman alkion indeksin 1.17 [max 2 p] Mikä vaihtoehdoista kuvaa alla olevan koodinpätkän toimintaa( 1p)? Perustelu (1 p). N on kokonaisluku >= 0. int f=0; for(int i=0; i < N; i++) if(a[i] < a[f]) f = i; a) Järjestää taulukon a N ensimmäistä komponenttia laskevaan suuruusjärjestykseen. b) Järjestää taulukon a N ensimmäistä komponenttia nousevaan suuruusjärjestykseen. c) Määrittää taulukon a N:n ensimmäisen alkion joukosta pienimmän alkion indeksin. d) Määrittää taulukon a N:n ensimmäisen alkion joukosta suurimman alkion indeksin 1.18 [max 2 p] Mikä vaihtoehdoista kuvaa alla olevan koodinpätkän toimintaa( 1p)? Perustelu (1 p). N on kokonaisluku > 0. int f=0; for(int i=N-1; i >=0; i--) if(a[i] > a[f]) f = i; a) Järjestää taulukon a N ensimmäistä komponenttia laskevaan suuruusjärjestykseen. b) Järjestää taulukon a N ensimmäistä komponenttia nousevaan suuruusjärjestykseen. c) Määrittää taulukon a N:n ensimmäisen alkion joukosta pienimmän alkion indeksin. d) Määrittää taulukon a N:n ensimmäisen alkion joukosta suurimman alkion indeksin 1.19 [max 2 p] Mikä vaihtoehdoista kuvaa alla olevan koodinpätkän toimintaa( 1p)? Perustelu 1 p). N on kokonaisluku >= 0. int f=0; for(int i=0; i < N; i++) if(a[i] > a[f]) f = i; a) Järjestää taulukon a N ensimmäistä komponenttia laskevaan suuruusjärjestykseen. b) Järjestää taulukon a N ensimmäistä komponenttia nousevaan suuruusjärjestykseen. c) Määrittää taulukon a N:n ensimmäisen alkion joukosta pienimmän alkion indeksin. d) Määrittää taulukon a N:n ensimmäisen alkion joukosta suurimman alkion indeksin 1.20 [max 2 p] Mikä vaihtoehdoista kuvaa alla olevan koodinpätkän toimintaa( 1p)? Perustelu 1 p). N on kokonaisluku > 0. int f=0; int i; i = N-1; while(i >=0){ if( a[i] < a[f]) f = i; i--; } a) Järjestää taulukon a N ensimmäistä komponenttia laskevaan suuruusjärjestykseen. b) Järjestää taulukon a N ensimmäistä komponenttia nousevaan suuruusjärjestykseen. c) Määrittää taulukon a N:n ensimmäisen alkion joukosta pienimmän alkion indeksin. d) Määrittää taulukon a N:n ensimmäisen alkion joukosta suurimman alkion indeksin 1.21 [max 2 p] Mikä vaihtoehdoista kuvaa alla olevan koodinpätkän toimintaa( 1p)? Perustelu 1 p). N on kokonaisluku >= 0. int f=0; int i=0; while(i < N){ if( a[i] < a[f]) f = i; i--; } a) Järjestää taulukon a N ensimmäistä komponenttia laskevaan suuruusjärjestykseen. b) Järjestää taulukon a N ensimmäistä komponenttia nousevaan suuruusjärjestykseen. c) Määrittää taulukon a N:n ensimmäisen alkion joukosta pienimmän alkion indeksin. d) Määrittää taulukon a N:n ensimmäisen alkion joukosta suurimman alkion indeksin 1. 22 [max 2 p] Mitä alla oleva ohjelma tulostaa (1p)? Perustelu (1p). public class Testi1 { public static void main ( String [] args ) { int a= 1, b =2; swap(a,b); System.out.println("a= " + a+ " b= " + b ); } public static void swap( int n1, int n2){ int temp = n1; n1 = n2; n2 = temp; } } 1.23 [ max 2 p] Mitä mahtaa alla oleva ohjelma tulostaa (1p)? Perustelu (1p). public class Testi2 { public static void main ( String [] args ) { int [] a = {1,2}; swap(a); System.out.println("a[0] = " + a[0] + " a[1] = " + a[1] ); } public static void swap( int [] a){ int temp= a[0]; a[0]= a[1]; a[1] = temp; } } 1.24 [ max 2 p] Mitä mahtaa alla oleva ohjelma tulostaa (1p)? Perustelu (1p). public class Kasvata { public static void main(String [ ] args) { int j=0, i=0; for(i=0; i < 100; i++) j = j++; System.out.println( j ); } } 1.25 [max 6 p ] Etsi ja korjaa virheet alla olevista ohjelmista: a) public class Testi1_1{ public void main( string [] args ) { int i; int k = 100.0; int j= i+ 1; System.out.println("j on " + j + "ja k on " + k); } } b) public class Testi1_2 { public static void main( String [] args ) { for(int i = 0; i < 10; i++); summa = summa + i; if( i< j); System.out.println( i ) else System.out.println( j ); while( j < 10 ); { j++; }; do{ j++; }while( j < 10 ); } } 1.26 [max. 6 p] Korjaa virhe (tai virheet) alla olevista koodin osasista. Voit olettaa, että muuttuja x on oikein määritelty ja alustettu. a) if(x >5 ); System.out.print("Suurempi"); b) if(x==0 ) return 0; else if(x < 0) return -1; else (x > 0) return 1; c) if(x==0)||(x ==1) return 1; d) return ( -0.5 <= x <= 0.5 ); e) public static double keskiarvo( int a; int b ) { return(a + b)/ 2.0; } f) if(x =1 ) x++; else x = x+ 2; g) int z = 5.0e-3; h) whilex <10 x = x+ 2; 2. [ 6 p.] Lisää alla olevaan ohjelmarunkoon käskyt, joiden avulla ohjelma tulostaa seuraavanlaisen pyramidin toistorakenteita käyttäen (ns. hardkoodaatusta vastauksesta ei anneta pisteitä). 1 23 2 3 45 43 45 67 65 4 5 67 89 87 65 67 89 01 09 87 6 7 89 01 23 21 09 87 89 01 23 45 43 21 09 8 9 01 23 45 67 65 4 3 21 09 01 23 45 67 89 87 65 43 21 0 import java.io.*; class Koe { public static void main ( String [] argv ) throws IOException { BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in )); // lisätään vastauskoodi ja kommentit tähän väliin }// main päättyy }// class päättyy 3. [2 p] Tee ohjelma, joka tulostaa alla olevan kuvion toistorakenteita käyttäen. a aa aaa aaaa aaaaa aaaaaa 4. [2 p] Tee ohjelma, joka tulostaa alla olevan kuvion toistorakenteita käyttäen. a aa aaa aaaa aaaaa aaaaaa 5. [2 p] Tee ohjelma, joka tulostaa alla olevan kuvion toistorakenteita käyttäen. aaaaaa aaaaa aaaa aaa aa a 6. [2 p] Tee ohjelma, joka tulostaa alla olevan kuvion toistorakenteita käyttäen. aaaaaa aaaaa aaaa aaa aa a 7. [6 p.] Määrittele metodi, joka saa parametrinä merkkitaulukon. Metodi tallettaa taulukon sisällön tekstitiedostoon, joka avataan ja suljetaan tässä metodissa. Ohjelmassa on varmistettava, että tiedoston avaaminen onnistui. 8. [ 6 p.]. Määrittele metodi tulostaJaKorvaa, joka saa parametrinä merkkijonon. Metodi tulostaa parametin kaikki muut merkit sellaisenaan paitsi isot kirjaimet, jotka muutetaan ennen tulostusta pieniksi kirjaimiksi. Esimerkisi parametri: aBc1nn345AA tulostuisi muodossa: abc1nn345aa. 9. [ 6 p.] Lisää alla esitettyyn ohjelmarunkoon toiminnot, joiden avulla ohjelma varaa tilaa kokonaislukutaulukolle, jonka koko kysytään käyttäjältä. Ohjelmassa on varmistettava ettei käyttäjä anna taulukon kooksi nollaa tai sitä pienempää arvoa. Tämän jälkeen ohjelma täyttää taulukon lukemalla käyttäjältä kokonaislukuja. Luettu luku talletetaan taulukkoon vain jos luku on väliltä -10000 ... 10000, muut arvot jätetään huomioimatta (taulukko on kuitenkin täytettäväviimeistä sijaa myöten!). import java.io.*; class Koe { public static void main ( String [] argv ) throws IOException { BufferedReader stdin = new BufferedReader ( new InputStreamReader ( System.in )); // lisätään vastauskoodi ja kommentit tähän väliin }// main päättyy }// class päättyy 10. [max 6 p.] Toteuta metodi public static int laske( int luku). Metodi laskee parametrina tulevan kokonaisluvun numeroiden lukumäärän ja palauttaa tämän arvon kutsujalleen. Metodin on laskettava oikein myös negatiivisten lukujen numeroiden määrä ( esimerkiksi luvussa -9999 on neljä numeroa). 11.[max 6 p.] Toteuta metodi public static void tulosta( int [][] taulukko). Metodi tulostaa kaksiulotteisen taulukon sisällön kuvaruudulle. 12. [6 p.] Toteuta metodi: public static void talleta(String [] taulukko, String tiedosto) throws IOException, joka saa parametrinä merkkijonotaulukon ja tiedoston nimen. Metodi tallettaa taulukon sisällön tekstitiedostoon, joka avataan ja suljetaan tässä metodissa. Ohjelmassa on varmistettava, että tiedoston avaaminen onnistui. 13. [ 6 p.]. Toteuta metodi: public static String poista(String etsittava, String tiedosto) throws IOException, joka saa parametrinä merkkijonon ja tiedoston nimen. Metodi kopioi tiedoston sisällön uuteen tiedostoon nimeltään temp.txt. Kopiointi tehdään lukemalla alkuperäisestä tiedostosta merkkijono ja kirjoittamalla se uuteen tiedostoon, merkkijonoa ei kuitenkaan kirjoiteta tiedostoon jos se sisältää etsittava merkkijonon. 14. [ 6 p.] Lisää alla esitettyyn ohjelmarunkoon toiminnot, joiden avulla ohjelma varaa tilaa merkkijonotaulukolle, jonka koko kysytään käyttäjältä. Ohjelmassa on varmistettava ettei käyttäjä anna taulukon kooksi nollaa tai sitä pienempää arvoa. Tämän jälkeen ohjelma täyttää taulukon käyttäjän syöttämillä merkkijonoilla. import java.io.*; class Koe { public static void main ( String [] argv ) throws IOException { BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in)); // lisätään vastauskoodi ja kommentit tähän väliin }// main päättyy }// class päättyy 15. [ 6 p.] Lisää alla esitettyyn ohjelmarunkoon toiminnot, joiden avulla ohjelma varaa tilaa merkkitaulukolle, jonka koko kysytään käyttäjältä. Ohjelmassa on varmistettava ettei käyttäjä anna taulukon kooksi nollaa tai sitä pienempää arvoa. Tämän jälkeen ohjelma täyttää taulukon lukemalla käyttäjältä merkkejä. Luettu merkki talletetaan taulukkoon jos merkki on joku merkeistä: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z Muut merkit jätetään huomioimatta, taulukko on kuitenkin täytettävä viimeistä sijaa myöten! import java.io.*; class Koe { public static void main(String [] argv)throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); // lisätään vastauskoodi ja kommentit tähän väliin }// main päättyy }// class päättyy 16. [ 6 p.]. Määrittele metodi public static void etsi(char [] merkkitaulukko). Metodi laskee merkkitaulukon merkkien: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z esiintymislukumäärät ja tulostaa lukumäärät kuvaruudulle sopivasti muotoiltuna. 17. [ 6 p.] Lisää alla esitettyyn ohjelmarunkoon toiminnot, joiden avulla ohjelma varaa tilaa reaalilukutaulukolle, jonka koko kysytään käyttäjältä. Ohjelmassa on varmistettava ettei käyttäjä anna taulukon kooksi nollaa tai sitä pienempää arvoa. Tämän jälkeen ohjelma täyttää taulukon lukemalla käyttäjältä reaalilukuja. Luettu luku talletetaan taulukkoon vain jos luku on nollaa suurempi, muut arvot jätetään huomioimatta (taulukko on kuitenkin täytettävä viimeistä sijaa myöten!). import java.io.*; class Koe { public static void main ( String [] argv ) throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in )); // lisätään vastauskoodi ja kommentit tähän väliin }// main päättyy }// class päättyy 18.[6 p.] Määrittele metodi, joka saa parametrinä reaalilukutaulukon. Metodi tallettaa taulukon arvot tekstitiedostoon, joka avataan ja suljetaan tässä metodissa. 19. [6 p.] Tee ohjelma, jossa varataan tilaa kaksiulotteiselle kokonaislukutaulukolle, taulukon rivien lukumäärä kysytäään käyttäjältä, sarakkeiden lukumäärä on 2. Tämän jälkeen ohjelma lukee käyttäjältä taulukkoon kokonaislukuja siten, että vain taulukon kunkin rivin 1. sarakkeeseen talletetaan luku ( toinen sarake jää tyhjäksi). 20. [6 p.] Toteuta metodi public static int laske( double luku). Metodi laskee parametrina tulevan reaaliluvun numeroiden lukumäärän ja palauttaa tämän arvon kutsujalleen. Metodin on laskettava oikein myös negatiivisten lukujen numeroiden määrä ( esimerkiksi luvussa -9.99 on kolme numeroa). 21. [max 6 p.] Toteuta metodi public static void tulosta( double [][] taulukko). Metodi tulostaa kaksiulotteisen taulukon sisällön kuvaruudulle. 22. [max 6 p.] Toteuta metodi: public static void laskeJaTulostaSarakesummat( int [][] taulukko). Metodi laskee kaksiulotteisen taulukon sarakesumat ja tulostaa taulukon sisällön ja lasketut summat kuvaruudeulle. Esimerkkiksi, jos taulukko sisältäisi luvut 1 2 1 3 1 5 1 4 2 niin ohjelman tulostus näyttäisi vaikka tältä: 1 2 1 3 1 5 1 4 2 5 7 8 23. [max 6 p.] Kirjoita metodi keskiarvo, joka palauttaa parametrina annetun reaalilukutaulukon nollaa suurempien alkioiden keskiarvon. 24. [max 6 p.] Kirjoita metodi, joka saa yhden reaalilukuparametrin. Metodi palauttaa kokonaisluvun, joka on ko. reaaliluku pyöristettynä. Tavallinen pyöristys esim. 1.5 -> 2.