Java 程序在到达while循环之前结束

Java 程序在到达while循环之前结束,java,Java,嗨,伙计们,我正在尝试制作一个彩票程序,我正在尝试让用户在询问他们是否想重试后输入。但是我的程序在到达while循环之前就结束了 public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String yn = ""; Lottery.getTicket(); Lottery.generateWinningNumbe

嗨,伙计们,我正在尝试制作一个彩票程序,我正在尝试让用户在询问他们是否想重试后输入。但是我的程序在到达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;
}
import java.util.Random;
导入java.util.Set;
导入java.util.TreeSet;
导入java.util.Scanner;
公共类彩票{
公共静态集GenerateWinningNumber()
{
随机rndNumbers=新随机数();
TreeSet winningNumbers=新TreeSet();
int max=40;
int min=1;
整数范围;
整数;
对于(int i=0;i<6;i++)
{
范围=最大值-最小值+1;
sixNum=rndNumbers.nextInt(范围)+min;
while(winningNumbers.contains(sixNum))
{
sixNum=rndNumbers.nextInt(范围)+min;
}
WinningNumber.add(六位数);
}
系统输出打印(“中奖号码:+中奖号码”);
返回赢取号码;
}
公共静态集getTicket()
{
int用户输入;
TreeSet getNumbers=新树集();
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入1-40之间的6个数字”);
对于(int i=0;i 40)
{
System.out.println(“无效。选择1-40之间的数字”);
userInput=input.nextInt();
}
}
添加(用户输入);
}
input.close();
System.out.println(“您的票证是:“+GetNumber”);
返回getnumber;
}

}//彩票类结束

您正在使用扫描器对象

Scanner input = new Scanner(System.in);
在彩票中。你是吗

input.close();
这意味着System.in将在程序的其余部分关闭


尝试将Scanner对象从
main
传递到其他需要它的类和方法。

在到达while循环之前结束
,因此必须抛出一些异常-可能是
彩票上的NPE
?我不确定我的彩票类中是否有NPE。但是我把它包括在帖子中,如果你进入while循环,你将永远不会退出,因为input.hasNextLine()将始终为真。如果用户键入除“y”以外的任何内容来重复该过程,则您只需继续向输出中写入“完成”,除非您键入“y”,这将允许用户选择更多的数字,但您的while循环将永远不会退出。@JohnG yes我添加了一个
中断进入
其他
。休息时间很好。。。您是否也知道输入错误会使程序崩溃。例如,如果用户意外输入number.omg以外的任何内容。啊。你说得对。它也在我的彩票课上。这就是为什么。非常感谢你。