Java fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

7.8 KiB

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

  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

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