Antti Laaksonen: Tehtävän 3 arvostelusta Tehtävästä sai pisteitä seuraavasti: * lukujen kysyminen taulukkoon: 3 p * taulukon järjestäminen: 3 p * haettavien lukujen kysyminen: 3 p * binäärihakualgoritmi: 3 p Jokaisessa kohdassa pisteitä sai, jos koodin perusrakenne oli järkevä. Pienet virheet vähensivät yhden pisteen ja suuret virheet kaksi pistettä. Yleisiä pieniä virheitä olivat seuraavat: * silmukka ei käsittele taulukon viimeistä lukua * ehdossa oleva vertailu on väärin päin * taulukon indeksiä käytetään kuin taulukon arvoa Yleinen suuri virhe oli selkeä puute koodin rakenteessa tai monta pientä virhettä yhdessä. Tehtävä oli osattu yleisesti ottaen hyvin. Seuraavassa on yksi tapa ratkaista tehtävä: *** import java.util.Scanner; public class Lukuhaku { private static Scanner lukija = new Scanner(System.in); private static void vaihtoJarjesta(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 boolean binHae(int[] taulu, int haettava) { int vasen = 0; int oikea = taulu.length - 1; int keski; while (vasen <= oikea) { keski = (vasen + oikea) / 2; if (haettava == taulu[keski]) { return true; } if (haettava < taulu[keski]) { oikea = keski - 1; } else { vasen = keski + 1; } } return false; } public static void main(String[] args) { System.out.println("Kuinka monta lukua?"); int maara = lukija.nextInt(); int[] taulu = new int[maara]; for (int i = 0; i < maara; i++) { System.out.println("Anna " + (i + 1) + ". luku:"); taulu[i] = lukija.nextInt(); } vaihtoJarjesta(taulu); System.out.println("Voit kysyä lukuja, 0 lopettaa."); boolean jatko = true; while (jatko) { System.out.println("Anna luku:"); int luku = lukija.nextInt(); if (luku != 0) { if (binHae(taulu, luku)) { System.out.println("Luku on taulukossa!"); } else { System.out.println("Lukua ei ole taulukossa!"); } } else { jatko = false; } } } }