没有数组的java随机数生成器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有数组的java随机数生成器相关的知识,希望对你有一定的参考价值。
我是Java的新手并且正在完成一项任务。我需要生成1到49范围内的6个随机数,这很简单。然而,复杂的是数字不能重复。我对条件的唯一选择是while循环或if else语句。数组和所有其他循环都是此分配的禁区。真的可以使用一些关于如何应用我所拥有的选项的物流建议。我意识到没有数组,其他循环,我将有很多重复的代码,但可以处理。我只是需要一些帮助包围我的头。
如果您不能使用数组或其他集合,则可以创建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);
}
}
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);
喜欢先洗牌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();
}
这似乎是一个相当奇怪的练习,没有数组的尝试。这是可能的,但我不认为它对学习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)。
你实际上需要取出已经选择的可能性:
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++;
以上是关于没有数组的java随机数生成器的主要内容,如果未能解决你的问题,请参考以下文章
java 编程随机生成20个80以内的数,不允许有重复的数据,存放到数组中,最后输出 代码