2016-10-28 5 views
-1

привет, ребята, я пытаюсь сделать программу лотереи. И я пытаюсь получить вход пользователей, спросив, хотят ли они повторить игру. Но моя программа заканчивается до достижения цикла while.программа заканчивается до достижения while loop

public class Main { 

public static void main(String[] args) 
{ 

    Scanner input = new Scanner(System.in); 
    String yn = ""; 

    Lottery.getTicket(); 
    Lottery.generateWinningNumbers(); 
    System.out.print("\nWould you like to try again? "); 

    while(input.hasNextLine()) 
    { 
     yn = input.nextLine(); 

     if(yn.equalsIgnoreCase("y")) 
     { 
      Lottery.getTicket(); 
      Lottery.generateWinningNumbers(); 
     } 
     else 
     { 
      System.out.println("Done"); 
     } 

    } 
    input.close(); 
} 

} 

В моей лотереи классе:

import java.util.Random; 
import java.util.Set; 
import java.util.TreeSet; 
import java.util.Scanner; 

public class Lottery { 



public static Set<Integer> generateWinningNumbers() 
{ 
    Random rndNumbers = new Random(); 
    TreeSet<Integer> winningNumbers = new TreeSet<Integer>(); 

    int max = 40; 
    int min = 1; 
    int range; 
    int sixNum; 

    for(int i = 0; i < 6; i++) 
    { 
     range = max - min + 1; 
     sixNum = rndNumbers.nextInt(range) + min; 

     while(winningNumbers.contains(sixNum)) 
     { 
      sixNum = rndNumbers.nextInt(range) + min; 
     } 

     winningNumbers.add(sixNum); 
    } 
    System.out.print("Winning Numbers: " + winningNumbers); 
    return winningNumbers; 
} 


public static Set<Integer> getTicket() 
{ 
    int userInput; 
    TreeSet<Integer> getNumbers = new TreeSet<Integer>(); 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter your 6 numbers between 1-40: "); 

    for (int i = 0; i<6 ; i++) 
    { 
     System.out.print(i+1 + ": "); 
     userInput = input.nextInt(); 
     while(userInput <1 || userInput > 40 || getNumbers.contains(userInput)) 
     { 
      if (getNumbers.contains(userInput)) 
      { 
       System.out.println("Number already picked"); 
       userInput = input.nextInt(); 
      } 
      if(userInput < 1 || userInput > 40) 
      { 
       System.out.println("Invalid. Pick a number between 1-40"); 
       userInput = input.nextInt(); 
      } 
     } 
     getNumbers.add(userInput); 

    } 
    input.close(); 
    System.out.println("Your ticket was: " + getNumbers); 
    return getNumbers; 
} 

} // конец класса лотереи

+0

'заканчивается до достижения цикла while ', поэтому должно быть выбрано какое-то исключение - возможно, NPE в лотерее? –

+0

Я не уверен, есть ли NPE в моем классе лотереи. Но я включил его в сообщение. – OrangePineapple

+0

Если вы введете свой цикл while, вы никогда не выйдете, потому что input.hasNextLine() всегда будет true. Если пользователь вводит что-либо другое, кроме «y», чтобы повторить этот процесс, вы просто будете писать «Готово» к выходу, если вы не наберете «y», который позволит пользователю выбирать большее количество номеров, но цикл while никогда не выйдет. – JohnG

ответ

1

Вы с помощью объекта сканера

Scanner input = new Scanner(System.in); 

в Lottery.getTicket и вы

input.close(); 

Это означает, что System.in будет закрыт для остальной части программы

Попробуйте передавая объект Scanner от main к другим классам и метод, который в ней нуждается.

+0

omg. Ughh. ты прав. Это тоже в моем классе лотереи. Вот почему. СПАСИБО БОЛЬШОЕ. – OrangePineapple