Java - 没有重复的数字数组

时间:2014-10-29 13:26:23

标签: java numbers bluej

我正在使用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!");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如提到的“fge”,使用Set添加您从用户那里获得的所有值。

  1. 获取用户输入并将其添加到Set。
  2. 使用Iterator检查用户输入的值并生成随机数。

    Set myset = new HashSet();
    myset.add(user_input1);
    myset.add(user_input1);
    
  3. 要重新使用迭代器'

    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。如果您无法传入重复内容,则不应在比较数组中包含重复值。彩票在现实生活中并不公平,但并非不公平; - )

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