yleinen logiikka 8p - pelaaja voi arvata saman luvun useamman kerran -3p - lukujen kysely puuttuu -2p binäärihaku 4p - vasen/oikea/keski asetettu väärin -1p - while-ehto väärin -1p - if-ehto väärin -1p - if-lauseiden sijoitukset väärin -1p - palauttaa väärän arvon -1p järjestäminen 4p - ei järjestetty ollenkaan -4p - järjestetään jokaisen syötteen jälkeen -2p - sisempi for: int j = 1 -2p - taulukon indeksi menee taulukon yli -2p - muuttujien vaihto virheellinen -1p HUOM! järjestämiskohdasta sai 4p, jos taulukkoa piti jokaisen syötteen jälkeen järjestyksessä (siis taulukkoa EI järjestetty jokaisen syötteen jälkeen, mutta järjestys pidettiin) , jolloin sitä ei tarvinnut erikseen järjestää. /** * Ohjelmoinnin perusteet, Avoin yliopisto kesä 2004 * Koetehtävä 3 (Arvauspeli), esimerkkivastaus. * * @author Olli Jokinen */ public class Arvauspeli { private static void järjestä(int[] taulu) { for(int i=0; i < taulu.length-1; i++) { for(int j=i+1; j < taulu.length; j++) { if(taulu[i] > taulu[j]) { int apu = taulu[i]; taulu[i] = taulu[j]; taulu[j] = apu; } } } } private static int binHae(int[] taulu, int haettava) { int oikea = taulu.length-1; int vasen = 0; int keski; while(vasen <= oikea) { keski = (oikea+vasen)/2; if(taulu[keski] == haettava) { return keski; } else if (taulu[keski] > haettava) { oikea = keski-1; } else if (taulu[keski] < haettava) { vasen = keski+1; } } return -1; } public static void main(String[] args) { int[] luvut = new int[100]; int arvaukset = 0, oikeatArvaukset = 0, arvaus; int[] oikeat = new int[2]; System.out.println("Arvauspeli"); System.out.println("----------\n"); System.out.println("Pelinjohtaja, ole hyvä ja anna 100 eri kokonaislukua."); for(int i=0; i < luvut.length; i++) { System.out.println("Anna "+(i+1)+". luku:"); luvut[i] = Lue.kluku(); } järjestä(luvut); System.out.println("Kiitos, pyydä nyt pelaaja paikalle."); while(oikeatArvaukset < 3) { System.out.println("Anna "+(arvaukset+1)+". arvaus: "); arvaus = Lue.kluku(); arvaukset++; if(binHae(luvut, arvaus) != -1) { boolean aiempi = false; for(int i = 0; i < oikeat.length; i++) { if(arvaus == oikeat[i]) { aiempi = true; } } if(aiempi) { System.out.println("Olet jo arvannut luvun "+arvaus+ "."); } else { if(oikeatArvaukset < 2) { oikeat[oikeatArvaukset] = arvaus; } oikeatArvaukset++; System.out.println("Oikein! Luku "+arvaus+" oli pelinjohtajan syöttämä luku."); if(oikeatArvaukset < 3) { System.out.println("Sinulla on nyt "+oikeatArvaukset+" oikeaa arvausta."); } } } else { System.out.println("Ei osunut, yritä uudelleen!"); } } System.out.println("Arvasit kolme pelinjohtajan syöttämää lukua "+arvaukset+" yrityksellä."); } }