当前位置: 首页 > 知识库问答 >
问题:

使用数组和方法的彩票程序(Java)

诸龙野
2023-03-14

我正在制作一个彩票程序,模拟一个人选择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!");
            }
        }

    }
}

共有2个答案

孙熠彤
2023-03-14

您应该在与数字相关的方法中使用字段,因为您的数字是在本地方法中生成的,而不是按类生成的。

权胜泫
2023-03-14

最好提供接受一些参数并返回结果的函数,而不是修改函数之外的一些变量/字段,因为它有助于避免许多错误,并有助于测试此类函数。

此外,如果相同的数字/值在代码中多次出现,最好将其提取到一个单独的常数中,以减少代码中可能需要更改的位置数,例如,上面的代码在所有方法中都包含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.如果用户按照准确的顺序匹