0

我有这个任务:

使用 if/else 打印 5 个 1-52 之间的随机整数,不重复。

到目前为止,这是我的代码。它会打印一些数字,但有时会打印重复的数字。

import java.util.Random;

public class RandomCards {

    public static void main(String[] args) {

        Random randomCards = new Random();
        int card;

        for (int x = 1; x <= 5; x++) {
            card = randomCards.nextInt(52) + 1;
        }
        if (card != randomCards) // if the value of card is not equal, proceed
        {
            System.out.print(card + " ");
        } else {
            return card; // if the value are the same get random integers again
        }
    }
}
4

6 回答 6

1
public static void main(String args[]) {
    Random randomNumber = new Random();
    // Set stores only Unique values
    Set<Integer> cards = new HashSet<Integer>();

    // Iterate over to generate random numbers
    while (cards.size() < 5) {
        int r = randomNumber.nextInt(52) + 1;
        cards.add(r);
    }
    for(Integer card : cards) {
        System.out.println(card);
    }
}
于 2014-02-10T05:37:02.153 回答
0

你可以用这个

Random randomCards = new Random();
        int[] card={0,0,0,0,0};
        while(card[card.length-1] == 0) {
            int temp=randomCards.nextInt(52);
            for(int j=0;j< card.length ; j++){
             if(card[j] == 0){
                 card[j] = temp;
                 break;
             }
            }
        }
        for(int j=0;j< card.length ; j++){
         System.out.println(card[j]);
        }
于 2014-02-10T05:25:19.880 回答
0

也许这个?

Random rand = new Random();

// ArrayList to store non-duplicate cards.
ArrayList<Integer> cards = new ArrayList<Integer>();

// Iterate over to generate random numbers
while (cards.size() < 5)
{
    int r = rand.nextInt(52) + 1;

    if (!cards.contains(r))
        cards.add(r);        // Only add if there is no such number in list
}

希望这可以帮助。

于 2014-02-10T05:25:25.837 回答
0

目前尚不清楚您在问什么,但我从您的代码中注意到您没有任何重复检测。您需要保存生成的每个值并在创建新值时检查重复项。我建议创建一个Set<Integer>来保存您生成的值,调用add()每张新卡,并检查contains()是否已经选择了新值。您也想将循环条件更改为类似的东西cards.size() < 5

最后,请注意您的使用return card不正确,会导致编译时错误。return用于结束方法并将值发送回调用它的位置;该main方法(始终为void)没有返回值,并且无论如何结束该方法都没有意义。看起来某些代码可能是从drawCard()它自己的方法的版本中复制和粘贴的。相反,继续循环直到找到 5 张独特的卡片(例如使用size()我前面提到的方法)。

于 2014-02-10T05:18:34.720 回答
0

希望这会有所帮助。

它包括单独的计算方法,设置下限和上限并在列表中有 5 个整数时打印列表。使用 TreeSet 可以解决您的重复问题。就这样,

package com.project.stackoverflow;

import java.util.Random;
import java.util.Scanner;
import java.util.TreeSet;

public class RandomGenerator {

    public TreeSet<Integer> compute() {
        TreeSet<Integer> generatedList = new TreeSet<Integer>();
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the lower bound for checking random numbers:");
        long lowBound = s.nextLong();
        System.out.println("Enter the upper bound for checking random numbers:");
        long topBound = s.nextLong(); 
        Random randomNumbers = new Random();
        for (int i = 0; i < topBound; i++) {
            if (generatedList.size()==5) {
                break;
            }
            else {
            generatorFunc(lowBound, topBound,randomNumbers,generatedList);
            }
        }
        return generatedList;
    }

    public void generatorFunc(long lowBound,long topBound,Random randomNumbers, TreeSet <Integer> generatedList) {
        long limit = topBound - lowBound;
        long part = (long)(limit * randomNumbers.nextDouble());
        int randomNum = (int) (part + lowBound);
        generatedList.add(randomNum);
    }

    public void printList() {
        TreeSet<Integer> testListVals = compute();
        System.out.println("New" + testListVals);
    }

    public static void main(String[] args) {
        RandomGenerator obj = new RandomGenerator();
        obj.printList();
    }
}
于 2014-02-10T06:44:45.480 回答
-1

如果您的问题只是重复,那么您可以将生成的每个随机数存储在一个数组中,并且对于每次连续调用nextint(),检查它是否已经存在于存储值数组中直到它存在,调用nextint ()再次用于该迭代本身,否则将其存储在数组中并进入下一次迭代。

于 2014-02-10T05:23:10.387 回答