2016-10-28 19 views
-1

こんにちは私は宝くじプログラムを作ろうとしています。そして、プレイを再試行したいかどうかを尋ねた後にユーザーの入力を得ようとしています。しかし、私のプログラムはwhileループに達する前に終了します。プログラムがwhileループに達する前に終了する

私の宝くじクラスで
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

あなたはスキャナオブジェクトにLottery.getTicketで

Scanner input = new Scanner(System.in); 

を使用していて、あなたが

input.close(); 

これは、プログラム

の残りの部分は、それを必要とする他のクラスやメソッドにmainからスキャナオブジェクトを渡してみためSystem.inが閉鎖されることを意味します。

+0

mg。うーん。あなたが正しい。私の宝くじクラスでも。それが理由です。どうもありがとうございます。 – OrangePineapple

関連する問題