|
|
- Kirjoita ohjelma Lotto, joka hyödyntää aikaisemmassa tehtävässä kirjoittamaasi Leikkaus-luokkaa.
-
- Ohjelmasi tulee ensin pyytää käyttäjältä oikea rivi sekä lisänumero ja niiden jälkeen käyttäjän oma lottorivi. Oikea rivi ja lisänumero syötetään samalle riville välilyönneillä eroteltuina.
-
- Ohjelmasi tehtävä on tarkastaa, kuinka monta numeroa käyttäjän riviltä osui oikeisiin numeroihin ja osuiko lisänumero. Hyödynnä osumien laskemisessa Leikkaus-luokan laskeLeikkaus-metodia ja lisänumeron tarkastamisessa listan contains-metodia.
-
- Tulosta lopputulos muodossa "N oikein ja lisänumero." tai "N oikein." riippuen siitä, osuiko lisänumero käyttäjän riviin.
-
-
- ✂ Sinun ei tarvitse erikseen palauttaa Leikkaus-luokkaa, se löytyy Viopesta valmiina. Huomaa että tässä tehtävässä Leikkaus-luokalle ei ole määritetty pakettia, eli se on tavallaan samassa paketissa toteuttamasi Lotto-luokan kanssa. Poista siis mahdollinen import-komento, mikäli olet omassa kehitysympäristössäsi sijoittanut nämä kaksi luokkaa eri paketteihin. ✂
-
- ```
- Example output:
- Anna oikea rivi (7 numeroa + lisänumero): 4 12 14 17 23 33 35 8
- Anna tarkastettava rivi (7 numeroa): 4 6 7 8 12 16 28
-
- 2 oikein ja lisänumero.
- ```
-
- --------------------
-
- **Lotto.java**
-
- 1) Hakee Leikkaus -luokan ulkopuolelta (Viopessa automaattisesti, ei käytetä importia)
-
-
- ```
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Scanner;
-
- public class Lotto {
-
- public static void main(String[] args) {
-
- Scanner syote = new Scanner(System.in);
- int oikeaMaxNumCount = 8;
- int arvausMaxNumCount = 7;
-
- System.out.print("Anna oikea rivi (7 numeroa + lisänumero): ");
- String riviOikea = syote.nextLine();
- List<Integer> riviOikeaInt = Lotto.tarkistaSyote(oikeaMaxNumCount, riviOikea);
-
- System.out.print("Anna tarkastettava rivi (7 numeroa): ");
- String riviArvaus = syote.nextLine();
- List<Integer> riviArvausInt = Lotto.tarkistaSyote(arvausMaxNumCount, riviArvaus);
-
- int i = 0;
- List<Integer> riviOikeaIntEqualSize = new ArrayList<Integer>();
- while (i < arvausMaxNumCount) {
- riviOikeaIntEqualSize.add(riviOikeaInt.get(i));
- i++;
- }
-
- List<Integer> leikkausLista = Leikkaus.laskeLeikkaus(
- riviOikeaIntEqualSize,
- riviArvausInt
- );
-
- // if riviArvausInt contains extra number (lisänumero) defined as the last value in riviOikeaInt
- if (riviArvausInt.contains(riviOikeaInt.get(oikeaMaxNumCount - 1))) {
- System.out.printf("%d oikein ja lisänumero.", leikkausLista.size());
- } else {
- System.out.printf("%d oikein.", leikkausLista.size());
- }
-
- }
-
- private static List<Integer> tarkistaSyote(int luvutMaxCount, String numeroListaStr) {
-
- int i = 0;
- int lottoMin = 1;
- int lottoMax = 42;
-
- List<Integer> numeroLista = new ArrayList<Integer>();
- List<String> numeroListaRaw = Arrays.asList(numeroListaStr.split(" "));
-
- if ( numeroListaRaw.size() != luvutMaxCount) {
- System.err.printf("Väärä määrä syötettyjä arvoja (sallittu: %d, syötetty: %d)",
- luvutMaxCount, numeroListaRaw.size()
- );
- System.exit(1);
- }
-
- while (i < numeroListaRaw.size()) {
- try {
- int numero = Integer.parseInt(numeroListaRaw.get(i));
-
- if (numero < lottoMin || numero > lottoMax) {
- System.err.printf(
- "Syötetty arvo %d ei ole hyväksyllä arvovälillä %d - %d.\n",
- numero, lottoMin, lottoMax
- );
- }
-
- numeroLista.add(numero);
-
- } catch (NumberFormatException e) {
- System.err.printf("Syötetty arvo %s ei ole kokonaisluku\n", numeroListaRaw.get(i));
- System.exit(1);
- }
-
- i++;
- }
- return numeroLista;
- }
-
- }
- ```
-
- /* ---------- ---------- */
-
- **Lotto.java**
-
- 2) Sisältää integroidun/optimoidun leikkaus-luokan
-
- ```
- public class Lotto {
-
- public static void main(String[] args) {
-
- Scanner syote = new Scanner(System.in);
- int oikeaMaxNumCount = 8;
- int arvausMaxNumCount = 7;
-
- System.out.print("Anna oikea rivi (7 numeroa + lisänumero): ");
- String riviOikea = syote.nextLine();
- List<Integer> riviOikeaInt = Lotto.tarkistaSyote(oikeaMaxNumCount, riviOikea);
-
- System.out.print("Anna tarkastettava rivi (7 numeroa): ");
- String riviArvaus = syote.nextLine();
- List<Integer> riviArvausInt = Lotto.tarkistaSyote(arvausMaxNumCount, riviArvaus);
-
- int i = 0;
- List<Integer> riviOikeaIntEqualSize = new ArrayList<Integer>();
- while (i < arvausMaxNumCount) {
- riviOikeaIntEqualSize.add(riviOikeaInt.get(i));
- i++;
- }
-
- List<Integer> leikkausLista = Leikkaus.laskeLeikkaus(
- riviOikeaIntEqualSize,
- riviArvausInt
- );
-
- // if riviArvausInt contains extra number (lisänumero) defined as the last value in riviOikeaInt
- if (riviArvausInt.contains(riviOikeaInt.get(oikeaMaxNumCount - 1))) {
- System.out.printf("%d oikein ja lisänumero.", leikkausLista.size());
- } else {
- System.out.printf("%d oikein.", leikkausLista.size());
- }
-
- }
-
- private static List<Integer> tarkistaSyote(int luvutMaxCount, String numeroListaStr) {
-
- int i = 0;
- int lottoMin = 1;
- int lottoMax = 42;
-
- List<Integer> numeroLista = new ArrayList<Integer>();
- List<String> numeroListaRaw = Arrays.asList(numeroListaStr.split(" "));
-
- if ( numeroListaRaw.size() != luvutMaxCount) {
- System.err.printf("Väärä määrä syötettyjä arvoja (sallittu: %d, syötetty: %d)",
- luvutMaxCount, numeroListaRaw.size()
- );
- System.exit(1);
- }
-
- while (i < numeroListaRaw.size()) {
- try {
- int numero = Integer.parseInt(numeroListaRaw.get(i));
-
- if (numero < lottoMin || numero > lottoMax) {
- System.err.printf(
- "Syötetty arvo %d ei ole hyväksyllä arvovälillä %d - %d.\n",
- numero, lottoMin, lottoMax
- );
- }
-
- numeroLista.add(numero);
-
- } catch (NumberFormatException e) {
- System.err.printf("Syötetty arvo %s ei ole kokonaisluku\n", numeroListaRaw.get(i));
- System.exit(1);
- }
-
- i++;
- }
- return numeroLista;
- }
-
- /*
- * public static PrintStream laskeLeikkaus(List<Integer> ekaLista, List<Integer> tokaLista) {
- *
- * List<Integer> leikkausLista = new ArrayList<Integer>();
- * int i = 0;
- *
- * // Intersection, exclude extra number (lisänumero)
- * while (i < ( ekaLista.size() - 1)) {
- * int a = 0;
- * while (a < tokaLista.size()) {
- *
- * // Get common values if leikkausLista does not contain the value already
- * if (ekaLista.get(i) == tokaLista.get(a) && !leikkausLista.contains(tokaLista.get(a))) {
- * leikkausLista.add(tokaLista.get(a));
- }
- a++;
- }
- i++;
- }
-
- Collections.sort(leikkausLista);
-
- // if tokaLista contains extra number (lisänumero) defined as the last value in ekaLista
- if (tokaLista.contains(ekaLista.get(ekaLista.size() - 1))) {
- return System.out.printf("%d oikein ja lisänumero.", leikkausLista.size());
- } else {
- return System.out.printf("%d oikein.", leikkausLista.size());
- }
- ```
|