Gyakorlati alapok III.
Lottózás osztályszinten
Pálinkó Tímea tanítványom legutóbbi házi feladata volt a Virtuális ötös lottó című fejezet kódjait átírni, valamint osztályszinten kibővíteni. Amint az a tehetségeknél lenni szokott, a keletkezett kód végül nem az eredeti kibővített, hanem új, saját alkotássá terebélyesedett. Konkrét megoldandó feladatai a következők voltak:
-
határozza meg a lottózásos algoritmus elkülöníthető funkcióit és alkossa meg hozzájuk az osztályokat,
-
a bemeneti adatokat minden szempontból validálni kell,
-
használja fel az elkülönített Controller osztály lehetőségét,
-
további, nem kötelező jelleggel javasolt volt az angol nyelv használata.
Tímea a feladatot viszonylag hamar, a Tőle megszokott eleganciával oldotta meg. Néhány kisebb kört kellett futnunk a validálási feladat értelmezésekor, de utána lényegében nagy rutinnal vezette le a projektet. A keletkezett osztályok a következőek:
-
Controller.java
-
Lottery.java
-
Messages.java
-
Sorting.java
-
Validator.java
Nézzük meg a futtatható Java-kódot:
Controller.java
import
java.util.Scanner;
public class Controller {
private Scanner sc = new Scanner (System.in);
private int number;
public int getNumber(){
return this.number;
}
public void setNumber(int number){
this.number = number;
}
public static void main(String[] args) {
lottery();
}
public static int [] lottery(){
Lottery lottery = new Lottery();
Validator valid = new Validator();
Controller cont = new Controller();
int[] tips = cont.tipps();
int[] drawnNumbers = lottery.lottery();
lottery.hits(drawnNumbers, tips);
return drawnNumbers;
}
public int []tipps(){
int j = 0;
String tipString ;
int tipp;
int tippTomb[] = new int[5];
Validator validator = new Validator();
Messages messages = new Messages();
int i = 0;
do{
boolean isNumber = true;
isNumber = true;
messages.firstMessage();
tipString = sc.nextLine();
isNumber =
validator.isNumber(tipString);
System.out.println(isNumber);
if (isNumber == true){
setNumber(Integer.parseInt(tipString));
if(
validator.isValid(getNumber()) == false){
isNumber = false;
}
if(isNumber == true){
i++;
for(int l =
0; l < 5; l++){
if(tippTomb[l] !=0 && tippTomb[l] == getNumber()){
isNumber = false;
messages.repeatingNumber();
i--;
}
}
}
if(isNumber == true){
tippTomb[j] =
getNumber();
j++;
}
}
}while(i != 5);
System.out.println();
Sorting shorting = new Sorting();
shorting.sorting(tippTomb);
System.out.println("Tippek: ");
for(int numbers: tippTomb){
System.out.print(numbers+" ");
}
System.out.println();
sc.close();
return tippTomb;
}
}
Lottery.java
import java.util.Random;
public class Lottery {
public int []lottery(){
Sorting shorting = new Sorting();
int[] lottery = new int[5];
Random rnd = new Random();
System.out.println("A kisorsolt szamok: ");
int number;
int i =0;
while(i < 5){
number = rnd.nextInt(90)+1;
boolean included = false;
for(int j = 0; j < i; j++){
if(lottery[j]== number){
included = true;
}
}
if(included == false){
lottery[i] =
number;
i++;
}
}
shorting.sorting(lottery);
for(int drownNumbers : lottery){
System.out.print(drownNumbers+" ");
}
return lottery;
}
public int []hits(int[] lottery,int[] tips){
int[] results = new int[5];
int hits = 0;
for (int i = 0; i < 5; i++){
for (int j = 0; j < 5; j++){
if
(lottery[i]== tips[j]){
results[hits]= tips[j];
hits++;
}
}
}
System.out.println();
System.out.println("Onnek "+ hits+" talalata van. ");
if (hits > 0){
System.out.print("Az eltalalt szamok:
");
for (int szam: results){
if(szam !=
0){
System.out.print(szam+" ");
}
}
}
return results;
}
}
Messages.java
public class
Messages {
public void firstMessage(){
System.out.println("Kerem, adja meg a tippet!");
}
public void notNumber(){
System.out.println("Nem szamot adott meg!");
}
public void notGoodNumber(){
System.out.println("Kerem, 1-90 kozotti szamot valasszon!");
}
public void repeatingNumber(){
System.out.println("Ne irja ketszer ugyanazt a szamot!");
}
}
Sorting.java
public class Sorting {
public int []sorting(int [] tomb){
int[] arrangedArray = tomb;
for(int i = 0; i <= 4; i++){
for(int j = i + 1; j < 5; j++){
if(arrangedArray[i] > arrangedArray[j]){
int storage = arrangedArray[i];
arrangedArray[i] = arrangedArray[j];
arrangedArray[j]= storage; }
}
}
return arrangedArray;
}
}
Validator.java
public class
Validator {
public boolean isValid (int szam){
Messages messages = new Messages();
boolean goodNumber = true;
if(szam < 1 || szam > 90){
goodNumber = false;
messages.notGoodNumber();
}
return goodNumber;
}
public boolean isNumber (String tipString){
boolean isNumber = true;
Messages messages = new Messages();
int tipp = 0;
try{
tipp = Integer.parseInt(tipString);
}
catch (NumberFormatException ae){
messages.notNumber();
isNumber = false;
}
return isNumber;
}
}
Végeredmény:
Kerem, adja meg a tippet!
s
Nem szamot adott meg!
false
Kerem, adja meg a tippet!
0
true
Kerem, 1-90 kozotti szamot valasszon!
Kerem, adja meg a tippet!
3
true
Kerem, adja meg a tippet!
3
true
Ne irja ketszer ugyanazt a szamot
Kerem, adja meg a tippet!
4
true
Kerem, adja meg a tippet!
h
Nem szamot adott meg!
false
Kerem, adja meg a tippet!
Nem szamot adott meg!
false
Kerem, adja meg a tippet!
5
true
Kerem, adja meg a tippet!
6
true
Kerem, adja meg a tippet!
7
true
Tippek:
3 4 5 6 7
A kisorsolt szamok:
9 26 63 67 86
Onnek 0 talalata van.