gpt4 book ai didi

java - 创建彩票机

转载 作者:行者123 更新时间:2023-11-30 02:33:03 24 4
gpt4 key购买 nike

我在一个项目中遇到了困难,该项目正在创建一台彩票机,随机打印 1 到 42 之间的 6 个数字,其中没有 2 个数字是相同的。用户还必须插入 6 个数字。如果有一个数字与计算机随机选择的数字相同,则计算机必须将其打印出来。如果没有,电脑就会显示你是个失败者。现在的问题是我不确定如何确保没有两个随机选择的数字是相同的。如果数字小于 1、大于 42 或等于先前插入的数字,程序还应要求不同的数字,并扫描它。 (用户不能输入2个相同的号码)PS:我只是一个初学者,知道 for 循环 while 循环和 if 语句,所以如果答案非常简单和基本,我会喜欢它。请检查我的代码并告诉我是否有任何不起作用或不合逻辑的地方。预先感谢您

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

public class LotoMachine {

public static void main(String[] args) {

System.out.println("Please enter 6 numbers between 1 and 42.");
Scanner scan = new Scanner(System.in);

int[] marks = new int[6];
Random ran = new Random();
int[] x = new int[6];
boolean winner = false;

for (int i = 0; i < 6; i++) {
marks[i] = scan.nextInt();
}
for (int j = 0; j < 6; j++) {
x[j] = ran.nextInt(42) + 1;
for (int y = 0; y < j; y++) {
if (x[j] == x[y]) {
x[j] = ran.nextInt(42) + 1;
j=0;
}
}
}

for (int m = 0; m < 6; m++) {
System.out.println(x[m]);
}
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
if (marks[i] == x[j]) {
winner = true;
System.out.println("Number(s) that matched: " + marks[i]);
}
}
}
if (winner != true) {
System.out.println("You are such a loser");
}
}
}

最佳答案

The Fisher Yates Shuffle正在迅速成为我对 Stackoverflow 上所有内容的首选答案。

您应该执行以下操作:

  • 创建一个数组,其中包含按升序排列的 42 个数字。该数组的索引介于 0 到 41 之间。
  • 生成随机数 r0,其中 0 <= r0 < 42
  • 将索引 0 处的数字与索引 r0 处的数字交换。
  • 生成随机数 r1,其中 1 <= r1 < 42
  • 将索引 1 处的数字与索引 r1 处的数字交换。
  • 生成随机数 r2,其中 2 <= r2 < 42
  • 将索引 2 处的数字与索引 r2 处的数字交换。

依此类推,直到交换了索引 5 处的数字。显然,将上述步骤放入循环中是很简单的。另请注意,与自身交换数字并不是错误。

数组中的前 6 个数字(索引 0 到 5)是选定的彩票号码。

该算法可以推广到从 m 个对象中选择任意 n 个唯一项。例如,拥有一个包含 52 个项目的数组并遍历所有 52 个项目是对一副纸牌进行洗牌建模的便捷方法。

这是一些实现该算法的代码(我还没有编译或测试它,所以可能会有错误

Random random = new java.util.Random();

int numbers[] = new int[42];

// create the initial array
for (int i = 0 ; i < 42 ; ++i)
{
numbers[i] = i + 1;
}

// shuffle
for (int i = 0 ; i < 6 ; ++i)
{
int ri = random.nextInt(42 - i) + i; // generates a random index between i and 42
int tmp = numbers[ri];
numbers[ri] = numbers[i];
numbers[i] = tmp;
}

// your six lottery numbers are in numbers[0] to numbers[5]

关于java - 创建彩票机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43784865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com