Java-无重复数字数组

Java-无重复数字数组,java,numbers,bluej,Java,Numbers,Bluej,我正在通过BlueJ使用Java创建彩票程序,我对用户输入的号码和程序生成的号码(包括1-49)有问题,我需要用户输入的号码不能重复,即用户不能输入1和1 我真的不知道如何使数字不重复我在考虑使用一个数组,但我不知道什么类型或从哪里开始,我对整个编程都很陌生 import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class JavaApplication8 { public

我正在通过BlueJ使用Java创建彩票程序,我对用户输入的号码和程序生成的号码(包括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!");
        }
    }
}
导入java.util.array;
导入java.util.Random;
导入java.util.Scanner;
公共类JavaApplication8{
公共静态void main(字符串[]args){
扫描仪用户输入=新扫描仪(System.in);
扫描仪输入=新扫描仪(系统输入);
int[]LotteryNumbers=新int[6];
int输入;
整数计数=0;
System.out.print(“欢迎使用我的彩票计划,该计划会获取\n您的彩票号码并将其与本周的彩票号码进行比较!”);
System.out.print(“\n\n按enter键继续”);
keyIn.nextLine();
for(int i=0;i49)
{
while(输入<1 | |输入>49)
{
System.out.println(“输入的号码无效!\n请输入彩票号码(介于1和49之间)”+计数);
input=Integer.parseInt(user_input.next());
如果(input>=1 | | input如“fge”所述,请使用Set添加从用户处获得的所有值

  • 获取用户输入并将其添加到集合中
  • 使用迭代器检查用户输入的值和生成的随机数

    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
    }
    

    我假设这是一个学校项目/实验室?(这是由于JavaApplication8的类名)如果是这样的话,讲师最可能寻找的是一个包含方法

    对于contains方法,您编写了一个方法,该方法接受整数并检查它是否已在您的LotteryNumbers数组中,然后返回布尔值。如果它在数组中,则返回true,如果不在数组中,则返回false。在将数字插入LotteryNumbers之前将调用此方法。您可以使用不在数组中的count变量在contains方法中,似乎在其他任何地方用作循环的限制,以避免检查未初始化的条目

    如果没有对类型的限制,那么其他人建议的集合想法会更有效,这取决于你应该使用什么来满足你的需求

    此外,您使用的逻辑很可能也应用于ActLotteryNumber。如果传入的不是重复的,那么比较数组中就不应该有重复的值。彩票在现实生活中是不公平的,但也不是那么不公平;-)


    第一步应该是检查你对这个项目的限制。

    为什么不使用
    集合
    ,因为它不允许重复?很抱歉有点傻,但你能解释一下你的意思吗?使用集合类对象而不是int数组,谷歌搜索集合或搜索Java API以了解更多该项目是为大学准备的是的,但不是我正在使用的代码被找到了,我正在尝试使用它,因为我真的不太擅长这一点,在我们必须提交此文件时,我真的看不到我有任何类似于程序的东西。除了停止重复的数字和程序的金钱方面,我设法完成了很多工作。将其分解为小部件。一件一件地做。我越想它,集合就不起作用,因为它只解决重复项,你也必须保持顺序,有些集合我相信,有些不相信。如果你使用ArrayList(使用api,它是你的朋友),它有一个预先确定的包含方法(你应该研究它的机制)您可以在接受值之前调用。对于上面的代码if contains==true,不要添加到ArrayList中,再次提示输入一个带有重复值的数字。您好,我已经完成了一段代码,希望能够消除重复项,我正试图将其合并到上面的代码中,但我有点问题下面是代码:'public Set LotteryNumbers(){Set RandomNumbers=new HashSet();Random Random=new Random();for(int i=0;i)问题出在哪里?是因为您的集合中没有得到足够的数字吗?如果是这个问题,是因为集合没有向集合中添加重复的数字(如您所愿)。您可以使用带有条件RandomNumbers.size()!=6Also的while循环来代替for循环,该条件来自HashSet api(api仍然是您的朋友):迭代器()返回此集合中元素的迭代器。元素没有特定顺序返回。我不确定这是如何工作的?我是否要为用户添加所有可能的输入,即“myset.add(user_input1);”中的数字1-49位?迭代器位让我很困惑。您可以将用户输入从用户扫描仪添加到集合中。添加后,将集合值与随机数生成器进行比较。迭代器用于遍历集合,hasNext()返回集合中的下一个元素