2014-10-28 6 views
0

Я занимаюсь физическими упражнениями, когда мне нужно сделать игру «Лото».Как сравнить существующие числа из файла со случайным числом?

Я генерироваться 6 случайных чисел (rand1, rand2, rand3, rand4, rand5, rand6), и теперь я должен сравнить их с моими существующими номерами, которые сохраняются в файле f. Я хочу сравнить каждое случайное число за раз с номерами, которые я сохранил в своем файле.

Это то, что я до сих пор:

public class lottoEx{ 

    public static void main(String[] args)throws Exception{ 

     userNumbers(4, 5, 7, 9, 11, 19); 

     drawNumbers(); 


    } 

    public static void userNumbers(int num1, int num2, int num3, int num4, int num5, int num6)throws Exception{ //USER NUMBERS 

     File f = new File("lotto.dat"); 

     PrintStream output = new PrintStream(f); 

     output.println(num1 + " " + num2 + " " + num3 + " " + num4 + " " + num5 + " " + num6); 

     Scanner read = new Scanner(f); 

     System.out.print("Your numbers: "); 

     while(read.hasNext()){ 

     System.out.print(read.nextInt() + " "); 

     } 

    } 

    public static void drawNumbers()throws Exception{ //RANDOM NUMBERS 

     Random rand = new Random(); 

     int rand1 = rand.nextInt(19)+1; 
     int rand2 = rand.nextInt(19)+1; 
     int rand3 = rand.nextInt(19)+1; 
     int rand4 = rand.nextInt(19)+1; 
     int rand5 = rand.nextInt(19)+1; 
     int rand6 = rand.nextInt(19)+1; 

     Thread.sleep(2000); 

     System.out.println(); 
     System.out.println(); 

     System.out.print("The lotto numbers are: "); 

     Thread.sleep(2000); 

     System.out.print(rand1 + " " + rand2 + " " + rand3 + " " + rand4 + " " + rand5 + " " + rand6); 

     doCompare(rand1, rand2, rand3, rand4, rand5, rand6); 

     winCheck(); 

    } 

    public static void doCompare(int rand1, int rand2, int rand3, int rand4, int rand5, int rand6)throws Exception{ 

     Scanner scan = new Scanner("lotto.dat"); 

     Set<Integer> set = new HashSet<>(); 

     while(scan.hasNextInt()){ 
     set.add(scan.nextInt());  
     } 
     System.out.println(set); 

     if(set.contains(rand1)){ 

     System.out.println("Match on rand1"); 

     } 

    } 

    public static void winCheck()throws Exception{ 

     //code goes here 

    } 

} 

Похоже, что нечто неправильно, поскольку он сравнивает только случайное число с первым номером в моем файле? Я сейчас застрял. Надеюсь, кто-то может мне помочь! :-)

+0

Он содержит только 6 номеров: -10 7 5 11 19 – user3703289

+0

Вы должны рассмотреть возможность использования массива для хранения значений. – ifloop

+0

Замечание: вам не нужно использовать 'BufferedReader + FileReader' в качестве аргумента для сканера. Вы можете просто передать имя_файла. – TheLostMind

ответ

1

Простым и эффективным способом является сохранение всех номеров в файле в Set, а затем поиск набора для каждого случайного числа. Таким образом, вам нужно только один раз прочитать файл.

Set<Integer> set = new HashSet<>(); 

while(scan.hasNextInt()) { 
    set.add(scan.nextInt()); 
} 

if (set.contains(rand1)) { 
    System.out.println("MATCH on rand1: " + rand1); 
} 

// repeat for rand2, rand3..etc 
+0

Большое спасибо! Я вижу идею этого метода, но! Он по-прежнему не выходит с «Матч найден» даже Тхо я получить номера в моей консоли: Ваши номера: 4 5 7 9 11 19 Числа лото являются: 7 10 4 7 2 6 Может это имеет какое-то отношение к моим методам, из-за которых возникает онемение rand? Метод называется так: doCompare (rand1, rand2, rand3, rand4, rand5, rand6); И вот как я начинаю свой метод: public static void doCompare (int rand1, int rand2, int rand3, int rand4, int rand5, int rand6) – user3703289

+0

Возможно, файл не читается правильно. После цикла while попытайтесь просмотреть содержимое набора. Вы можете отлаживать или распечатывать контент. – Khalid

+0

Кроме того, возможно, вам следует обновить вопрос с помощью полного кода, включая метод вызова. – Khalid

0

Здесь попытка использования java.util.Set для хранения сгенерированных чисел и с помощью Scanner конструктор, который принимает файл в качестве аргумента.

public static void main(String[] args) throws FileNotFoundException { 
    final Set<Integer> lottoResults = new HashSet<>(); 
    final Random rnd = new Random(System.currentTimeMillis()); 

    // generate numbers 
    while (lottoResults.size() < 6) { 
     lottoResults.add(rnd.nextInt(49) + 1); 
    } 

    final Scanner in = new Scanner(new File("path\\to\\yourLottoFile.txt")); 
    for (String s : in.nextLine().split(",")) { 
     final int lottoGuess = Integer.parseInt(s); 
     // maybe some error handling here (invalid/wrong input)? 

     System.out.printf("The guess: %2d is %s\n", lottoGuess, (lottoResults.contains(lottoGuess) ? "correct!!!" : "incorrect")); 
    } 
} 

Пример вывод будет выглядеть следующим образом:

The guess: 4 is incorrect 
The guess: 10 is incorrect 
The guess: 7 is incorrect 
The guess: 5 is incorrect 
The guess: 11 is correct!!! 
The guess: 19 is incorrect