【问题标题】:Three-Digit Lottery三位数彩票
【发布时间】:2020-02-08 06:40:12
【问题描述】:

生成一个三位数的彩票。程序提示用户输入一个三位数字,根据以下规则判断用户是否中奖:

  • (规则 1)。如果用户输入的中奖号码与中奖号码完全一致,则奖金为 10,000 美元。
  • (规则 2)。如果用户输入的所有数字都与彩票号码中的所有数字匹配,则奖金为 3,000 美元。
  • (规则 3)。如果用户输入的一位数字与彩票号码中的一位数字匹配,则奖金为 1,000 美元。

我需要帮助让我的程序按照代码中的所有内容按预期运行。没有数组,没有字符串,除了已经存在的东西之外什么都没有。我的问题是,在规则 3 中,我不明白为什么它不能识别中奖数字。例如,我的猜数字是 142,彩票数字是 554,它会说“不匹配,下次好运”而不是“匹配一个数字,即使我的猜测中有一个正确的数字。

import java.util.Scanner;
public class Lottery {
    public static void main(String[] args) {

        //generate random lottery numbers 
        int lottery = (int)(Math.random() * 1000);

        //ask user to enter a 3 digit integer and store those numbers
        Scanner numbers = new Scanner(System.in);
        System.out.println("Please enter your lottery pick. Three Digits Only");
        int guess = numbers.nextInt();

        // numbers for lottery
        int lotteryDigit1 = lottery % 100;
        int lotteryDigit2 = lottery % 100 / 10;
        int lotteryDigit3 = lottery / 100;

        //get digits from guess
        int guessDigit1 = guess % 100; 
        int guessDigit2 = guess % 100 / 10; 
        int guessDigit3 = guess / 100; 

        //print out lottery numbers
        System.out.println("The lottery numbers are: " + lottery);

        if (guess == lottery)
            System.out.println("Exact Match!!! 10,000$ Prize!!!");
        else if (guessDigit2 == lotteryDigit1 
                && guessDigit1 == lotteryDigit2
                && guessDigit3 == lotteryDigit3)
            System.out.println("Matched all numbers!!! 3,000$ Prize!!!");
        //Rule 3
        else if (guessDigit1 == lotteryDigit1
            || guessDigit1 == lotteryDigit2
            || guessDigit1 == lotteryDigit3
            || guessDigit2 == lotteryDigit1
            || guessDigit2 == lotteryDigit2
            || guessDigit2 == lotteryDigit3
            || guessDigit3 == lotteryDigit1
            || guessDigit3 == lotteryDigit2
            || guessDigit3 == lotteryDigit3)  
            System.out.println("Mathed one number!!! 1,000$ Prize!!!");
        else enter code here
            System.out.println("No Match, Better Luck Next Time!");

【问题讨论】:

    标签: java


    【解决方案1】:

    问题是这段代码-

    int lotteryDigit1 = lottery % 100;
    

    对于lottery = 554,lotteryDigit1 将设置为 54。类似地,guessDigit1 设置为 42。相反,彩票 % 10 应该在此处为您提供最低有效数字。

    注意 - 在这种情况下,可能很容易找出这个缺陷,但学习如何使用调试器将有助于您将来解决类似的问题。

    【讨论】:

      【解决方案2】:

      因此,在这种情况下,存在一些非常小的错误。当您尝试获取数字 1 时,您需要以 100 为模。我相信您的意思是以 10 为模以将数字放在 1 的位置。如果您知道如何使用调试器,您可以查看这一点,或者在解决错误时简单地打印出您临时拥有的值。

      您没有提到的一件事,但我想您稍后会看到,您用于确定 3 个数字是否匹配的代码略有错误:

              else if (guessDigit2 == lotteryDigit1 
                      && guessDigit1 == lotteryDigit2
                      && guessDigit3 == lotteryDigit3)
      

      不比较正确的数字对。

      【讨论】:

        【解决方案3】:
        public class Main {
        
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in); //make new scanner
        

        // 生成一个随机的三位数

            // Prompt the user to enter a three-digit number
            //Generate random number with 3 diggits
            int randomLottery = 100 + (int)(Math.random() * ((999 - 100)+1));
            //Start scanner
        
            //Prompt user to enter three digits
            System.out.println(" Enter the Guess number (three digit) integer");
            int GuessUser = input.nextInt();
        
            int GUESS1 = GuessUser /100;
            int remainGuess = GuessUser % 100;
        
            int guess2 = remainGuess /10;
            int guess3= remainGuess % 10;
        
        
            //Get  3 digits from lottery
        
            int d1 = randomLottery /100;
            int remainL = randomLottery % 100;
        
            int d2 = remainL /10;
            int d3= remainL % 10;
        
            System.out.println(" The lottery numbers are " + d1 + " " + d2 + " " + d3 + "!");
        
            //**Check the guess and print out the award system.
            /* if users input matches the lottery input in exact order price is 10000$*/
        
            if (GuessUser == randomLottery ){
                System.out.println("You have won $10000. HAMBALYO!!!!");
        
                /* if all the DIGITS EQUAL $3000 */
        
            }else if (((GUESS1 == d1) || (GUESS1 == d2) || (GUESS1 == d3)) &&
                    ((  guess2 == d1) || (guess2 == d2) || (guess2 == d3)) &&
                    ((guess3 == d1) || (guess3 == d2) || (guess3 == d3))){
                System.out.println("ALL DIGITS MATCH! You have won $3000.");
        
                /* if at least one digit matches the lottery number the award is 1000$ */
        
            }else if (((GUESS1 == d1) || (GUESS1 == d2) || (GUESS1 == d3)) ||
                    ((guess2 == d1) || (guess2 == d2) || (guess2 == d3)) ||
                    ((guess3 == d1) || (guess3 == d2) || (guess3 == d3))){
                System.out.println("At least one number is correct. You win $1000 ");
            }else
                System.out.println ("No match");
        }
        

        }

        【讨论】:

          【解决方案4】:

          好吧,这是我在Javascript 中提出的类似解决方案:

          console.log('Program started...');
          
          // Settings
          const persist = true; // 1. Make sure the user inputs a number only, loop until the user inputs a number
          
          // Function: Generates 3 random numbers, between 1 and 10 (inclusive)
          const generateNumbers = () => {
            var arr = [];
            while (arr.length < 3) {
              var r = Math.floor(Math.random() * 10) + 1;
              arr.push(r);
            }
            return arr;
          };
          
          const winningNumbers = generateNumbers(); // An array of the 3 winning numbers
          
          // Function: Prompt user for a number
          const getUserNumber = (type = '', err = '') => {
            var q = "";
            if (err.trim() != '') q = "\n" + err + "\n";
            q += "Enter your ";
            q += type;
            q += " number";
            var inp = prompt(q);
            if (persist && inp != null) {
              if (inp.trim() == '' || isNaN(inp.trim())) getUserNumber(type, "Error: Invalid input!");
            }
            return inp;
          };
          
          var userNumbers = []; // An array of the 3 user selected numbers
          
          // Loop user input
          ['first', 'second', 'third'].forEach((e, i) => {
            let n = getUserNumber(e);
            userNumbers.push(Number(n));
          });
          
          var correct = 0; // Store correct matches
          
          var _winningNumbers = [...winningNumbers]; // Store winning numbers temporarily
          
          // Process correct answers
          userNumbers.forEach(n => {
            let count = _winningNumbers.filter(num => {
              return num == n
            }).length;
            if (count >= 1) {
              correct += 1;
              _winningNumbers.splice(_winningNumbers.indexOf(n), 1);
            }
          });
          
          // Process user winnings
          const getWinnings = () => {
            var winnings = "";
            switch (correct) {
              case 1:
                winnings = "$100";
                break;
              case 2:
                winnings = "$200";
                break;
              case 3:
                winnings = "$500";
                break;
              default:
                winnings = "$0";
                break;
            }
            return winnings;
          }
          
          // Alert winnings
          var resp = "";
          resp += "The computer's numbers are ";
          resp += winningNumbers.join(" ");
          resp += "\n";
          resp += "Your guesses were ";
          resp += userNumbers.join(" ");
          resp += "\n";
          resp += "You got ";
          resp += correct;
          resp += " right";
          resp += "\n";
          resp += "You've won ";
          resp += getWinnings();
          
          // Function: Show response to user and prompt 'Play again?''
          const showResponse = (err = '') => {
            var q = resp;
            q += "\n\n";
            if (err.trim() != '') q += "\n" + err + "\n";
            q += "Play Again? Y or N";
            var inp = prompt(q);
            if (persist && inp != null) {
              if (inp.trim() == '' || !isNaN(inp.trim())) showResponse("Error: Invalid input!");
            }
            if (inp.toLowerCase() == 'y') window.location.reload();
          };
          
          showResponse();
          
          console.log('Winning numbers: ', winningNumbers);
          console.log('Selected numbers: ', userNumbers);
          console.log('Correct numbers: ', correct);
          console.log('Amount won: ', getWinnings());
          
          console.log('...program completed!');

          这里是 the link 到 repo。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多