/* * Lausekielinen ohjelmointi II. * * Javalla toteutettu lukua arvuuttavan pelin algoritmi. Ohjelmaan on * lisätty käyttäjää avustavia tulosteita. Silmukkaa ohjaa lippumuuttuja. * Ohjelmaan on lisätty vakioita. * * Arvattava luku on kokonaisluku väliltä [ALARAJA, YLÄRAJA]. * * Jorma Laurikkala (jorma.laurikkala@tuni.fi). * * Viimeksi muutettu 30.10.2019. (Otettu alaraja käyttöön.) * */ // Otetaan käyttöön java.util-pakkauksen luokkia. import java.util.Scanner; import java.util.Random; public class VielaParempiLuvunArvuuttaja { public static void main(String[] args) { // Rajat vakioina. final int ALARAJA = 1; final int YLARAJA = 10; // Tervehditään käyttäjää ja kerrotaan ohjelmasta. System.out.println("Moi! Arvuutan lukua."); // Tuotetaan satunnainen kokonaisluku Random-luokan metodia käyttäen. // Metodi palauttaa satunnaisen kokonaisluvun väliltä [0, parametriarvo[. // Ala- ja ylärajan sisältäviä vakioita hyödynnetään siten, että satunnainen // luku saadaan välille [ALARAJA, YLÄRAJA]. Ensin arvotaan luku väliltä // [0, YLÄRAJA - ALARAJA] ja sitten tehdään siirros lisäämällä tulokseen // ALARAJA. Random arpoja = new Random(); int arvattava = arpoja.nextInt(YLARAJA - ALARAJA + 1) + ALARAJA; // Luodaan syötevirtaa lukeva olio arvausten lukemista varten. Scanner lukija = new Scanner(System.in); // Alustetaan lippumuuttuja. boolean vääräArvaus = true; // Arvuutetaan lukua käyttäjältä, kunnes hän arvaa oikein. Jälkiehto // on luonteva, koska aina on arvattava vähintään kerran. do { // Avustetaan käyttäjää. System.out.println("Anna arvaus:"); // Luetaan arvaus käyttäjältä. int arvaus = lukija.nextInt(); // Arvaus meni ali. if (arvaus < arvattava) { System.out.println("Meni ali."); } // Arvaus meni yli. else if (arvaus > arvattava) { System.out.println("Meni yli."); } // Oikein. Käännetään lippu. else { vääräArvaus = false; } } while (vääräArvaus); // Tänne päästään vain silmukan loputtua eli vain, kun arvaus on oikein. System.out.println("Oikein!"); } }