Как мне получить мою программу (лотерею), чтобы проверить подсказки еще раз? - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь написать программу лотереи (на основе венгерской игры, 5 чисел от 1 до 90), она работает почти нормально, когда я даю ей ошибочные числа (больше 90 или 0), она говорит мне, чтоЯ поступил неправильно.Но во второй раз это не так.Он продолжает игру с недействительными номерами.Какие у вас были советы, и что бы вы, ребята, сделали по-другому?

Спасибо, что уделили время.

Код:

import java.util.*;

class Lottery {

static int hits = 0;
Integer[] tippek = new Integer[5];
Random rand = new Random();
ArrayList<Integer> nums = new ArrayList<Integer>();
static Lottery lot = new Lottery();

public static void main (String[] args){

    lot.wnums();
    lot.tipread();
    lot.tipcheck();
    lot.wincheck();
    lot.result();

}



public void wnums () {
        // GENERATING THE WINNER NUMBERS
        Set<Integer> set = new HashSet<Integer>();
        for(int i = 0; set.size() < 5; i++){
            int x = rand.nextInt(90) + 1;
            set.add(x);
        }
        nums.addAll(set);

    }

public void tipread (){
    // READING THE TIPS
    System.out.println("Please write 5 different number from 1 to 90.");
    try{
    Scanner scan = new Scanner(System.in);
    tippek[0] = scan.nextInt();
    tippek[1] = scan.nextInt();
    tippek[2] = scan.nextInt();
    tippek[3] = scan.nextInt();
    tippek[4] = scan.nextInt();
    }catch (InputMismatchException ex){
        System.out.println("Error.");
    }
}

public void tipcheck() {

    int fault = 0;

    List<Integer> tips = Arrays.asList(tippek);
    try{
    for(int tipp : tippek){
        System.out.println(tipp);
        if(tipp == 0 || tipp > 90){
            fault++;
        }
    }
    if(fault == 1){
        System.out.println("One of your tips is invalid ");
        System.out.println("Write other numbers");
        lot.tipread();
    }
    if(fault > 1){
        System.out.println(fault + " of your tips are invalid ");
        System.out.println("Write other numbers");
        lot.tipread();
    }

    for(int tipp : tips){
        for(int i = 0; i < tips.size(); i++){
            if(tips.indexOf(tips.get(i)) != tips.lastIndexOf(tips.get(i))){
                System.out.println("You can write a number only once");
                lot.tipread();
            }
        }
    }

    }catch (NullPointerException ex){
        System.out.println("Error.");
    }



}

public void wincheck () {
    // CHECKING THE TIPS
    try{
    for(int tipp : tippek){
        for(int i = 0; i < 5; i++){
            if(nums.get(i) == tipp){
                hits++;
            }
        }
    }
    }catch(Exception ex){
        System.out.println(" ");
    }
}

public void result() {
    try{
    Arrays.sort(tippek);
    Collections.sort(nums);
    String tippeksor = Arrays.toString(tippek); 
    System.out.println("Your tips in ascending order: " + tippeksor);
    System.out.println("You have " + hits + " hits.");
    System.out.println("The winning numbers are: " + nums);

    }catch(Exception ex){
        lot.tipread();
    }

}
}

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

вместо вызова tipread напрямую из tipcheck tipcheck возвращает true, если все в порядке, false в противном случае и использование do-while в основном.

public static void main (String[] args){
   lot.wnums();
   do {
     lot.tipread();
    } while(!lot.tipcheck());
   lot.wincheck();
  lot.result();
}

и

public boolean tipcheck() {
int fault = 0;

List<Integer> tips = Arrays.asList(tippek);
try{
  for(int tipp : tippek){
    System.out.println(tipp);
    if(tipp < 1 || tipp > 90){
      fault++;
    }
  }
  if(fault == 1){
    System.out.println("One of your tips is invalid ");
    System.out.println("Write other numbers");
    // lot.tipread();
    return false;
  }
  if(fault > 1){
    System.out.println(fault + " of your tips are invalid ");
    System.out.println("Write other numbers");
    // lot.tipread();
    return false;
  }

  for(int tipp : tips){
    for(int i = 0; i < tips.size(); i++){
      if(tips.indexOf(tips.get(i)) != tips.lastIndexOf(tips.get(i))){
        System.out.println("You can write a number only once");
        // lot.tipread();
        return false;
      }
    }
  }

}catch (NullPointerException ex){
  System.out.println("Error.");
  return false;
}
return true;
}

вот так.

0 голосов
/ 17 ноября 2018

Включить lot.tipcheck() в качестве последнего утверждения внутри tipread():

public void tipread (){
    // READING THE TIPS
    System.out.println("Please write 5 different number from 1 to 90.");
    try{
    Scanner scan = new Scanner(System.in);
    tippek[0] = scan.nextInt();
    tippek[1] = scan.nextInt();
    tippek[2] = scan.nextInt();
    tippek[3] = scan.nextInt();
    tippek[4] = scan.nextInt();

    lot.tipcheck();
    }catch (InputMismatchException ex){
        System.out.println("Error.");
    }
}

, чтобы каждый раз, когда пользователь вводит действительные числа, они проверялись.
Другие модификации:
удалить lot.tipcheck(); из main()
После каждого lot.tipread(); в tipcheck() добавляйте return;

...