没有带java的数组的彩票程序

时间:2016-10-01 18:53:35

标签: java

大家好我真的卡住了,它关于一个随机生成一个四位数字的彩票程序,并提示用户输入一个四位数字而不使用数组并遵循这条规则 - 如果用户输入按照确切的顺序匹配彩票号,则奖励为10000美元 - 如果用户输入与不同顺序的四位数匹配,奖励为5000美元 - 如果用户输入与不同顺序的三位数匹配,奖励为2000美元 - 如果用户输入中的任何1位或2位数与奖金相匹配,奖金为500美元

我是用3位数字做的,但我不知道怎么做没有数组的四位数字。这就是我所做的:

import java.util.Scanner;

public class Programming {

    public static void main(String[] args) {
        // Generate a lottery
        int lottery = (int) (Math.random() * 1000);
        // Prompt the user to enter a guess
        Scanner input = new Scanner(System.in);
        System.out.print("Enter your lottery pick (three digits): ");
        int guess = input.nextInt();

        // Get digits from lottery
        int lotteryDigit1 = lottery / 100;
        int lotteryDigit2 = (lottery % 100) / 10;
        int lotteryDigit3 = lottery % 10;

        // Get digits from guess
        int guessDigit1 = guess / 100;
        int guessDigit2 = (guess % 100) / 10;
        int guessDigit3 = guess % 10;

        System.out.println("The lottery number is " + lotteryDigit1
                + lotteryDigit2 + lotteryDigit3);

        // Check the guess
        if (guess == lottery) {
            System.out.println("Exact match: you win $10,000");
        } else if ((guessDigit1 == lotteryDigit2 && guessDigit2 == lotteryDigit1 && guessDigit3 == lotteryDigit3)
                || (guessDigit1 == lotteryDigit2
                && guessDigit1 == lotteryDigit3 && guessDigit3 == lotteryDigit1)
                || (guessDigit1 == lotteryDigit3
                && guessDigit2 == lotteryDigit1 && guessDigit3 == lotteryDigit2)
                || (guessDigit1 == lotteryDigit3
                && guessDigit2 == lotteryDigit2 && guessDigit3 == lotteryDigit1)
                || (guessDigit1 == lotteryDigit1
                && guessDigit2 == lotteryDigit3 && guessDigit3 == lotteryDigit2)) {
            System.out.println("Match all digits: you win $5,000");
        } else if (guessDigit1 == lotteryDigit1 || guessDigit1 == lotteryDigit2
                || guessDigit1 == lotteryDigit3 || guessDigit2 == lotteryDigit1
                || guessDigit2 == lotteryDigit2 || guessDigit2 == lotteryDigit3
                || guessDigit3 == lotteryDigit1 || guessDigit3 == lotteryDigit2
                || guessDigit3 == lotteryDigit3) {
            System.out.println("Match one digit: you win $1,000");
        } else {
            System.out.println("Sorry, no match");
        }
    }
}

谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

另一个编辑

很抱歉花一点时间回复你。过了忙碌的几天。根据要求,这是完整的计划。请注意,这不完全是您的原始程序。我删除了一些东西,并添加了一些。也许最重要的是,我改变了我之前给你的功能。我最初回答你的问题,试图只给你四位数的匹配,但如果我写出整个事情,更有意义的概括一点。因为您的彩票奖励是基于匹配数字的数量,所以制作一个计算匹配数量的函数是很有意义的。这大大简化了你的if-else代码。

public static int getFourthDigit(int num) {
    return (num / 1000) % 10;
}

修改

看起来我没有正确理解。我相信有多种方法可以得到一个数字的给定数字,但我认为这是最容易思考的。除以1000将千位数移到1位置然后使用模数运算符去掉任何不在1位置的东西。除了数字的第四位外,这只剩下你了。

String

原始

如果我理解正确,您的难点在于匹配不同的有序四位数字。最明显的方法是检查四位数的所有可能的排序;只有15个他们并不完全相同。但是,输入15个条件很容易出错,而且很简单。如果您需要使用五位数来执行此操作,那将是无聊和乏味的两倍。

这是一个使用int代替1111来避免此问题的功能。它反复检查猜测的第一个字符,并检查字符是否在答案中。然后,它会从答案中删除匹配的字符,以避免出现1112public static boolean digitsMatch(String guess, String answer) { int matchingIndex; while (guess.length() > 0) { // check if the first digit of the guess is in the answer matchingIndex = answer.indexOf(guess.charAt(0)); // if not, there cannot possibly be four matches if (matchingIndex < 0) { return false; } // look at the rest of the guess guess = guess.substring(1); // and remove the no longer relevant character from the answer answer = answer.substring(0, matchingIndex) + answer.substring(matchingIndex + 1); } return true; } 这样的情况,其中猜测中的每个字符也在答案中,但它们不匹配。

{{1}}