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 on 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
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
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());
}