我有这个任务:
在1-52之间打印5个随机整数,使用if / else。
不重复
到目前为止,这是我的代码。它会打印一些数字,但有时会打印重复数据。
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
}
}
}
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
目前尚不清楚你在问什么,但我从你的代码中注意到你没有任何重复的检测。您需要保存生成的每个值,并在创建新值时检查重复项。我建议您创建一个Set<Integer>
来保存生成的值,为每张新卡调用add()
,然后选中contains()
以查看是否已选择新值。您还希望将循环条件更改为cards.size() < 5
。
最后,请注意您对return card
的使用不正确,将导致编译时错误。 return
用于结束方法并将值发送回调用它的位置; main
方法(始终为void
)没有返回值,无论如何结束方法都没有意义。看起来某些代码可能是从drawCard()
是其自己的方法的版本中复制和粘贴的。相反,只需保持循环,直到找到5张独特的卡片(例如使用我前面提到的size()
方法)。
答案 2 :(得分: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]);
}
答案 3 :(得分: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
}
希望这有帮助。
答案 4 :(得分: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();
}
}
答案 5 :(得分:-1)
如果你的问题只是重复问题,那么你可以存储在数组中生成的每个随机数,并且对于每次连续调用 nextint(),检查是否它已经存在于存储值数组中,直到它,再次为该迭代本身调用 nextint(),否则在数组中存储并转到下一次迭代。