Cześć, niedawno zacząłem przygodę z Javą. Chciałbym prosić o opinię i wskazówki jak mogę napisać to prościej. Dopiero się uczę i chciałbym wyrobić sobie dobre praktyki. Kod jest rozwlekły i zapewne mało czytelny. Co poprawić? :) Najbardziej nie podoba mi się redundancja i z jednej strony prosta z drugiej nieczytelna walidacja.
W skrócie:
Program do zabawy w lotto.
Wybieramy przedział liczb z których chcemy wybrać naszą szóstkę. Różnica jak wiadomo musi wynosic przynajmniej 6 pomiędzy min i max
Podajemy pokolei liczby, oczywiście nie mogą się powtarzać i nie mogą wychodzić za przedział.
Komputer losuje unikalne liczby z przedziału.
Porównujemy i wyświetlamy informacje o wygranej
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class Lotto {
Scanner input = new Scanner(System.in);
int min, max;
int[] player = new int[6];
int[] comp = new int[6];
int[] wins = new int[6];
void setMinMax() {
System.out.print("Podaj wartość minimalną większą od zera: ");
min = input.nextInt();
while (min < 1) {
System.out.print("Podaj liczbę większą od zera: ");
min = input.nextInt();
}
System.out.print("Podaj wartość maksymalną: ");
max = input.nextInt();
while (max < min + 5) {
System.out.print("Podaj przynajmniej o 5 większą od minimalnej ");
max = input.nextInt();
}
System.out.println("============================================");
System.out.println("Wartość minimalna w grze: " + min + ", maksymalna: " + max);
System.out.println("============================================");
}
void setNumbers() {
System.out.print("Podaj pierwszą liczbę z przedziału od " + min + " do " + max + ": ");
player[0] = input.nextInt();
while (player[0] < min || player[0] > max) {
System.out.print("Podaj liczbę z wybranego przedziału: ");
player[0] = input.nextInt();
}
System.out.print("Podaj drugą liczbę: ");
player[1] = input.nextInt();
while (player[1] == player[0] || player[1] < min || player[1] > max) {
while (player[1] == player[0]) {
System.out.print("Podana liczba została już przez Ciebie podana, podaj inną: ");
player[1] = input.nextInt();
}
while (player[1] < min || player[1] > max) {
System.out.print("Podaj liczbę z wybranego przedziału: ");
player[1] = input.nextInt();
}
}
System.out.print("Podaj trzecią liczbę: ");
player[2] = input.nextInt();
while (player[2] == player[0] || player[2] == player[1] || player[2] < min || player[2] > max) {
while (player[2] == player[0] || player[2] == player[1]) {
System.out.print("Podana liczba została już przez Ciebie podana, podaj inną: ");
player[2] = input.nextInt();
}
while (player[2] < min || player[2] > max) {
System.out.print("Podaj liczbę z wybranego przedziału: ");
player[2] = input.nextInt();
}
}
System.out.print("Podaj czwartą liczbę: ");
player[3] = input.nextInt();
while (player[3] == player[0] || player[3] == player[1] || player[3] == player[2] || player[3] < min || player[3] > max) {
while (player[3] == player[0] || player[3] == player[1] || player[3] == player[2]) {
System.out.print("Podana liczba została już przez Ciebie podana, podaj inną: ");
player[3] = input.nextInt();
}
while (player[3] < min || player[3] > max) {
System.out.print("Podaj liczbę z wybranego przedziału: ");
player[3] = input.nextInt();
}
}
System.out.print("Podaj piątą liczbę: ");
player[4] = input.nextInt();
while (player[4] == player[0] || player[4] == player[1] || player[4] == player[2] || player[4] == player[3] || player[4] < min || player[4] > max) {
while (player[4] == player[0] || player[4] == player[1] || player[4] == player[2] || player[4] == player[3]) {
System.out.print("Podana liczba została już przez Ciebie podana, podaj inną: ");
player[4] = input.nextInt();
}
while (player[4] < min || player[4] > max) {
System.out.print("Podaj liczbę z wybranego przedziału: ");
player[4] = input.nextInt();
}
}
System.out.print("Podaj szóstą liczbę: ");
player[5] = input.nextInt();
while (player[5] == player[0] || player[5] == player[1] || player[5] == player[2] || player[5] == player[3] || player[5] == player[4] ||player[5] < min || player[5] > max) {
while (player[5] == player[0] || player[5] == player[1] || player[5] == player[2] || player[5] == player[3] || player[5] == player[4]) {
System.out.print("Podana liczba została już przez Ciebie podana, podaj inną: ");
player[5] = input.nextInt();
}
while (player[5] < min || player[5] > max) {
System.out.print("Podaj liczbę z wybranego przedziału: ");
player[5] = input.nextInt();
}
}
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println("============ KUPON " + dateFormat.format(date) + " ============");
System.out.println("Wybrane przez Ciebie liczby to: " + player[0] + ", " + player[1] + ", " + player[2] + ", " + player[3] + ", " + player[4] + ", " + player[5]);
System.out.println("===================================================");
}
void lottery() {
Random generator = new Random();
comp[0] = generator.nextInt(max) + min;
comp[1] = generator.nextInt(max) + min;
while (comp[0] == comp[1]) {
comp[1] = generator.nextInt(max) + min;
}
comp[2] = generator.nextInt(max) + min;
while (comp[2] == comp[0] || comp[2] == comp[1]) {
comp[2] = generator.nextInt(max) + min;
}
comp[3] = generator.nextInt(max) + min;
while (comp[3] == comp[0] || comp[3] == comp[1] || comp[3] == comp[2]) {
comp[3] = generator.nextInt(max) + min;
}
comp[4] = generator.nextInt(max) + min;
while (comp[4] == comp[0] || comp[4] == comp[1] || comp[4] == comp[2] || comp[4] == comp[3]) {
comp[4] = generator.nextInt(max) + min;
}
comp[5] = generator.nextInt(max) + min;
while (comp[5] == comp[0] || comp[5] == comp[1] || comp[5] == comp[2] || comp[5] == comp[3] || comp[5] == comp[4]) {
comp[5] = generator.nextInt(max) + min;
}
System.out.println("Komora maszyny losującej jest pusta");
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
System.out.println("Zwalniamy blokadę");
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
System.out.println("Losujemy sześć liczb z przedziału od " + min + " do " + max);
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
System.out.println("Oto wylosowane liczby: " + comp[0] + ", " + comp[1] + ", " + comp[2] + ", " + comp[3] + ", " + comp[4] + ", " + comp[5]);
}
void check() {
int i = 0;
for (int j = 0; j < 6; j++) {
for (int z = 0; z < 6; z++) {
if (player[j] == comp[z]) {
wins[i] = player[j];
i++;
}
}
}
}
void result() {
int i = 0;
int j = 0;
boolean z = false;
for (int x : wins) {
if (x != 0) {
z = true;
}
}
if (z == true) {
System.out.print("Trafiłeś następujące liczby: ");
}
for (int x : wins) {
if (x == 0) {
continue;
} else {
if (i == 0) {
System.out.print(x);
i++;
j++;
} else {
System.out.print(", " + x);
j++;
}
}
}
System.out.println("\n===================================================");
switch (j) {
case 0:
System.out.println("Niestety nie trafiłeś ani jednej liczby");
break;
case 1:
System.out.println("Trafiłeś jedną liczbę, niestety nie daje to wygranej");
break;
case 2:
System.out.println("Trafiłeś dwie liczby, niestety nie daje to wygranej");
break;
case 3:
System.out.println("Trafiłeś trójkę! Twoja wygrana to 24 zł");
break;
case 4:
System.out.println("Trafiłeś czwórkę! Twoja wygrana to 200 zł!");
break;
case 5:
System.out.println("Trafiłeś piątkę! Twoja wygrana to 6000 zł!");
break;
case 6:
System.out.println("Trafiłeś szóstkę! Jesteś MILIONEREM!");
break;
}
System.out.println("===================================================");
}
public static void main(String args[]) {
Lotto coupon = new Lotto();
coupon.setMinMax();
coupon.setNumbers();
coupon.lottery();
coupon.check();
coupon.result();
}
}
Shalomnew Random().ints(nOfNums, 1, maxNum + 1).boxed().collect(Collectors.toSet());
karolinaa