我正在制作一个彩票程序,模拟一个人选择6个中奖号码,并使用多种方法抽奖中奖号码。
这是一个示例输出
Enter your numbers:
25
31
20
8
47
31
The winning numbers are:
48 16 28 38 46 36
0 out of the 6 numbers you chose are winning numbers, better luck next time!
我的问题是,查找匹配总数的方法不起作用,我不知道如何修复它。用户输入的数字和彩票随机数都是数组
这是我的代码:
import java.util.*;
public class Main {
private static boolean[] lottery;
private static boolean[] array;
public static void main(String[] args) {
getUserNumbers();
getRandomNumbers();
getTotalMatchedNumbers();
}
public static void getRandomNumbers(){
int[] lottery = new int[6];
int lotteryNumbers;
for (int i = 0; i < 6; i++) {
lotteryNumbers = (int) (Math.random() * 50);
for (int x = 0; x < i; x++) {
if (lottery[x] == lotteryNumbers)
{
lotteryNumbers = (int) (Math.random() * 50);
x = -1;
}
}
lottery[i] = lotteryNumbers;
}
System.out.println("The winning numbers are: ");
for (int i = 0; i < lottery.length; i++)
System.out.print(lottery[i] + " ");
}
public static void getUserNumbers(){
Scanner scanner = new Scanner(System.in);
int[] array = new int[10];
System.out.println("Enter your numbers: ");
for(int i=0; i < 6; i++){
array[i]=scanner.nextInt();
}
System.out.println("You have entered: ");
for (int i=0; i < 6; i++){
System.out.print(array[i]);
System.out.print(" ");
System.out.println(" ");
}
}
public static void getTotalMatchedNumbers(){
int matched = 0;
for(int i = 0; i < 6; i++){
for(int j = 0;j < 6; j++){
if(lottery[i] == array[j]){
matched = matched + 1;
}
}
if (matched != 6){
System.out.println(matched + " out of the 6 numbers you chose are winning numbers, better luck next time!");
}
else{
System.out.println("You got picked all the winning numbers! You win!");
}
}
}
}
您应该在与数字相关的方法中使用字段,因为您的数字是在本地方法中生成的,而不是按类生成的。
最好提供接受一些参数并返回结果的函数,而不是修改函数之外的一些变量/字段,因为它有助于避免许多错误,并有助于测试此类函数。
此外,如果相同的数字/值在代码中多次出现,最好将其提取到一个单独的常数中,以减少代码中可能需要更改的位置数,例如,上面的代码在所有方法中都包含6
,因此,如果需要更改这个明确的单个参数,则需要更新很多位置。
因此,代码可以像这样增强:
// main method
final int NUM_COUNT = 6;
final int LOTTERY_SIZE = 12; // use small number for testing purpose
int[] userNums = getUserNumbers(NUM_COUNT, 1, LOTTERY_SIZE);
int[] lottery = getLotteryNumbers(NUM_COUNT, 1, LOTTERY_SIZE);
System.out.print("The winning numbers are: ");
Arrays.stream(lottery).forEach(i -> System.out.print(i + " "));
System.out.println();
int win = getWinCount(lottery, userNums);
System.out.printf("%d out of %d numbers guessed.%n", win, NUM_COUNT);
if (win == NUM_COUNT) {
System.out.println("You won the jackpot!");
}else {
System.out.println("Better luck next time!");
}
读取用户输入的数字并验证用户输入。
public static int[] getUserNumbers(int numCount, int minNum, int maxNum) {
int[] userNums = new int[numCount];
Scanner input = new Scanner(System.in);
System.out.printf("Input %d numbers between %d and %d%n", numCount, minNum, maxNum);
for (int i = 0; i < numCount; i++) {
userNums[i] = input.nextInt();
if (userNums[i] < minNum || userNums[i] > maxNum) {
System.out.println("Invalid number, please correct");
i--;
}
}
return userNums;
}
使用数组生成彩票号码并确保不会出现重复,不过在这种情况下使用Set
会方便得多。
public static int[] getLotteryNumbers(int numCount, int minNum, int maxNum) {
Random random = new Random();
int[] lottery = new int[numCount];
for (int i = 0; i < numCount; i++) {
int n = minNum + random.nextInt(maxNum);
boolean duplicate = false;
for (int j = i - 1; j >= 0; j--) {
if (lottery[j] == n) {
duplicate = true;
break;
}
}
if (!duplicate) {
lottery[i] = n;
} else {
i--;
}
}
return lottery;
}
计算猜测数字的数量。它也可以使用Set
和方法retainAll
来促进。
public static int getWinCount(int[] lottery, int[] user) {
int win = 0;
for (int i = 0; i < lottery.length; i++) {
for (int j = 0; j < user.length; j++) {
if (lottery[i] == user[j]) {
win++;
break;
}
}
}
return win;
}
示例输出
Input 6 numbers between 1 and 12
2 3 6 7 10 11
The winning numbers are: 7 6 3 8 11 5
4 out of 6 numbers guessed.
Better luck next time!
我必须创建一个彩票游戏,其中你随机生成六个中奖号码,模拟彩票。让用户输入六个数字,看看他们是否中了彩票! 我已经做了很多,但现在我卡住了。我对java真的很陌生,所以请原谅我。当它提示要求另一个数字时,它会这样做,但它仍然显示它以显示自制的彩票选秀权。此外,当显示计算机制作的彩票选秀权的数字时,它们是重复的相同数字,而不是6个数字。计数器不太好用,可能有点小问题,但我无法弄清楚。谢谢你
所以我需要制作一个彩票游戏的程序。 我的代码支持4个游戏,6-42,MegaLotto(6-45),SuperLotto(6-49)和GrandLotto(6-55)它会询问要玩哪个游戏,6-42输入1等等。 游戏共有10名玩家,每个玩家的彩票中都有不重复的随机数字。(例如玩家1:1,2,3,4,5,6玩家2:2,3,4,5,6,7以此类推。) 有一个赢的组合(例如赢的组合:1,2,3,4,5,6
我的代码看起来很业余,因为我是一名软件工程专业的二年级学生。 我创建了一个彩票号码生成器,并注意到了奇怪但一致的结果。我的程序试图匹配之前的百万欧元抽奖彩票号码。我追踪尝试次数,也追踪匹配3、4、5和6个数字的次数。 尝试次数在100万到4.22亿之间。i、 e.我会运行程序10次,我会实现一个范围,我还会跟踪每次运行所需的时间长度。 我解释了一些事情,比如防止一个随机数被多次使用,这个检查是针对
这是我的任务。 如果随机的3位数字与用户的3位数字完全匹配,则会获得一些奖励。 如果用户匹配3位数字但顺序不一致,则其他奖励。 如果用户匹配2位,则其他奖品 如果用户输入仅匹配1位,则其他奖品 这是我想出的: 我得到了三位数的匹配,有时编译后会得到三位数和两位数的匹配。告诉我怎么了。提前谢谢你们。
我尝试使用charAt和子字符串,但被卡在子字符串部分,输出结果应该交换第一个和最后一个字符并打印出来。
嘿,伙计们,所以我正在为一个类编写这个程序,我在下面发布的作业以及我的程序。我编译了我的程序,似乎没有问题,但是当我运行. exe版本的程序时,它会在用户输入后崩溃,我不知道如何解决这个问题。如果有人能帮我,那就太棒了,谢谢!!!这是c语言的 方向假设您要开发一个玩彩票的程序。该程序随机生成一个两位数的彩票,提示用户输入一个两位数的号码,并根据以下规则确定用户是否中奖:1.如果用户按照准确的顺序匹