我正在使用Java通过BlueJ创建彩票计划,我遇到用户输入的数字和程序生成的数字(最多包括1-49)的问题,我需要这些数字用户输入的不重复,即用户不能输入1和1。
我不确定如何让数字不重复我正在考虑使用数组,但我不知道什么类型或从哪里开始我对整个编程事物都是新手。
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class JavaApplication8 {
public static void main(String[] args) {
Scanner user_input = new Scanner (System.in);
Scanner keyIn = new Scanner(System.in);
int[] LotteryNumbers = new int[6];
int input;
int count = 0;
System.out.print("Welcome to my lottery program which takes\nyour lottery numbers and compares\nthem to this weeks lottery numbers!");
System.out.print("\n\nPress the enter key to continue");
keyIn.nextLine();
for (int i = 0; i < LotteryNumbers.length; i++)
{
count ++;
System.out.println("Enter your five Lottery Numbers now " + count + " (must be between 1 and 49): ");
input = Integer.parseInt(user_input.next());
if (input < 1 || input > 49)
{
while (input < 1 || input > 49)
{
System.out.println("Invalid number entered! \nPlease enter lottery number (between 1 and 49) " + count);
input = Integer.parseInt(user_input.next());
if (input >= 1 || input <= 49)
{
LotteryNumbers[i] = input;
}
}
}
else
{
LotteryNumbers[i] = input;
}
}
System.out.println("Thank you for your numbers.\nThe system will now check if you have any matching numbers");
System.out.print("Press the enter key to continue");
keyIn.nextLine();
Random randNumGenerator = new Random();
StringBuilder output = new StringBuilder();
int[] ActLotteryNumbers = new int[6];
for (int j = 0; j < ActLotteryNumbers.length; j++)
{
int roll = randNumGenerator.nextInt(49);
ActLotteryNumbers[j] = roll;
}
System.out.println(Arrays.toString(ActLotteryNumbers));
int counter = 0;
for (int i = 0; i < LotteryNumbers.length; i++)
{
for (int j = 0; j < ActLotteryNumbers.length; j++)
{
if (LotteryNumbers[i] == ActLotteryNumbers [j])
{
counter ++;
System.out.println("The numbers that match up are: \n" + LotteryNumbers[i]);
}
}
}
if (counter == 0)
{
System.out.println("You had no matching numbers this week ... Try Again next week!");
}
}
}
答案 0 :(得分:1)
如提到的“fge”,使用Set添加您从用户那里获得的所有值。
使用Iterator检查用户输入的值并生成随机数。
Set myset = new HashSet();
myset.add(user_input1);
myset.add(user_input1);
要重新使用迭代器'
Iterator iterator = myset.iterator();
while(iterator.hasNext(){
int value= iterator.next();
if(randomValue==value)
//do your logic here
}
答案 1 :(得分:0)
我假设这是针对学校项目/实验室的? (这是由于JavaApplication8类名)如果是这种情况,那么教师最有可能寻找的是一种包含方法。
对于contains方法,您编写一个方法,该方法接受一个整数并检查它是否已经在您的LotteryNumbers数组中并返回一个布尔值。如果它在数组中,它将返回true,如果不在数组中则返回false。在将数字插入LotteryNumbers之前,将调用此方法。您可以使用您的count变量,它似乎不会在其他任何地方用作包含方法中循环的限制,以避免检查未初始化的条目。
如果对类型没有限制,那么其他人建议的设定理念会有效并且效率更高,它只取决于您应该根据自己的要求使用的内容。
此外,您使用的逻辑最有可能也应用于ActLotteryNumbers。如果您无法传入重复内容,则不应在比较数组中包含重复值。彩票在现实生活中并不公平,但并非不公平; - )
第一步应该是检查你对这个项目的限制。