没有数组的java随机数生成器

问题描述 投票:1回答:5

我是Java的新手并且正在完成一项任务。我需要生成1到49范围内的6个随机数,这很简单。然而,复杂的是数字不能重复。我对条件的唯一选择是while循环或if else语句。数组和所有其他循环都是此分配的禁区。真的可以使用一些关于如何应用我所拥有的选项的物流建议。我意识到没有数组,其他循环,我将有很多重复的代码,但可以处理。我只是需要一些帮助包围我的头。

java random duplicates
5个回答
4
投票

如果您不能使用数组或其他集合,则可以创建6个变量来保存生成数字。

public class Generate6Number {

public static void main(String[] args) {
    int num1 = 0;
    int num2 = 0;
    int num3 = 0;
    int num4 = 0;
    int num5 = 0;
    int num6 = 0;

    int count = 0;

    while (count < 6) {
        int numGen = (int) (Math.random() * 49);

        if (numGen != num1 &&
            numGen != num2 &&
            numGen != num3 &&
            numGen != num4 &&
            numGen != num5) {
            if (num1 == 0)
                num1 = numGen;
            else if (num2 == 0)
                num2 = numGen;
            else if (num3 == 0)
                num3 = numGen;
            else if (num4 == 0)
                num4 = numGen;
            else if (num5 == 0)
                num5 = numGen;
            else 
                num6 = numGen;

            count++;
        }
    }   

    System.out.println("Number 1: " + num1);
    System.out.println("Number 2: " + num2);
    System.out.println("Number 3: " + num3);
    System.out.println("Number 4: " + num4);
    System.out.println("Number 5: " + num5);
    System.out.println("Number 6: " + num6);

}

}

0
投票
Set<Integer> values = new HashSet<>();
Random rand = new Random();

while (values.size() <= 6) {
    int  n = rand.nextInt(50) + 1;
    values.add(n);
}
System.out.println(values);

0
投票

喜欢先洗牌6

public void shuffle() {
    int[] array = new int[49];
    for (int i = 0; i < array.length; i++) {
        array[i] = i + 1;
    }

    // we need first 6 random cards
    for (int i = 0; i < 6; i++) {
        int index = (int) (Math.random() * (( array.length - i) + 1));
        int temp = array[i];
        array[i] = array[index];
        array[index] = temp;
    }

    for (int i = 0; i < 6; i++) {
        System.out.print("[" + array[i] + "]");
    }
    System.out.println();
}

0
投票

这似乎是一个相当奇怪的练习,没有数组的尝试。这是可能的,但我不认为它对学习Java特别有益,因为它更像是数学练习而不是编程。

为了在1-49范围内生成6个不同的随机数,你基本上必须为这49个数字中的每一个决定是否“挑选”它,你只能选择6个数字。所以,你正在寻找一个choose(49, 6)可能的组合。

所以,你可以这样做:

int numToPick = 6;
for (int i = 1; i <= 49; ++i) {
  if (shouldPick(i, numToPick)) {
    System.out.println(i);
    --numToPick;
  }
}

(我使用了for循环;但是如果你可以使用的话,你总是可以将for循环重写为while循环)。

问题是如何实现shouldPick函数:它返回一个布尔值true表示你应该选择它,然后打印它;或者假的意思是你不会。

这将是一个概率函数(即它将使用随机数生成器),或者每次都不会给你不同的数字集。

计算出该函数形式的数学非常有趣,最终的实现非常简单;但如果我在这里给出答案,那就不好玩了。

(但我可以向你保证,我已经实现了它,只更改了上面片段中的一行;如果你计算一个随机数生成器,则为2)。


0
投票

你实际上需要取出已经选择的可能性:

Random rand = new Random();
int first = rand.nextInt(49) + 1;
int second = rand.nextInt(48) + 1;
int third = rand.nextInt(47) + 1;
int fourth = rand.nextInt(46) + 1;
int fifth = rand.nextInt(45) + 1;
int sixth = rand.nextInt(44) + 1;

if (first <= second) second++;
if (first <= third) third++;
if (first <= fourth) fourth++;
if (first <= fifth) fifth++;
if (first < sixth) sixth++;

if (second <= third) third++;
if (second <= fourth) fourth++;
if (second <= fifth) fifth++;
if (second <= sixth) sixth++;

if (third <= fourth) fourth++;
if (third <= fifth) fifth++;
if (third <= sixth) sixth++;

if (fourth <= fifth) fifth++;
if (fourth <= sixth) sixth++;

if (fifth <= sixth) sixth++;
© www.soinside.com 2019 - 2024. All rights reserved.