我对Java完全陌生,正在从事一项作业。我需要生成1-49范围内的6个随机数,这很简单。 但是,复杂的是数字不能重复。 我对条件的唯一选择是while循环或if else语句。 数组和所有其他循环均超出此分配范围。 真的可以就物流如何使用我所拥有的选择使用一些建议。我意识到没有数组,而其他循环将有很多重复的代码,但可以处理。我只需要一些帮助就可以解决这个问题。
答案 0 :(得分: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);
}
}
答案 1 :(得分: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);
答案 2 :(得分: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();
}
答案 3 :(得分: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,表示您应该选择它并打印出来;或为false表示您不会。
这将是一个概率函数(即 它会使用随机数生成器),否则每次都不会给您不同的数字集。
算出该函数形式的数学很有趣,最终实现却是微不足道的。但是如果我在这里给出答案,那就不好玩了。
(但是我可以向您保证我已经实现了它,只是在上面的代码片段中只更改了一行;如果您算是声明一个随机数生成器,则只需更改2行。)
答案 4 :(得分: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++;