Java 三位数彩票

Java 三位数彩票,java,Java,生成三位数的彩票。程序提示用户输入三位数,并根据以下规则确定用户是否获胜: 规则1。如果用户输入的内容与彩票号码的准确顺序匹配,则奖励为10000美元。 规则2。如果用户输入的所有数字与彩票号码中的所有数字匹配,则奖励为3000美元。 规则3。如果用户输入中的一位数字与彩票号码中的一位数字匹配,则奖励为1000美元。 我需要帮助,使我的程序能够在代码中看到的所有内容中正常运行。没有数组,没有字符串,只有已经存在的内容。我的问题是,在规则3中,我不理解为什么它不承认一个获胜的数字。例如,我的猜测数

生成三位数的彩票。程序提示用户输入三位数,并根据以下规则确定用户是否获胜:

规则1。如果用户输入的内容与彩票号码的准确顺序匹配,则奖励为10000美元。 规则2。如果用户输入的所有数字与彩票号码中的所有数字匹配,则奖励为3000美元。 规则3。如果用户输入中的一位数字与彩票号码中的一位数字匹配,则奖励为1000美元。 我需要帮助,使我的程序能够在代码中看到的所有内容中正常运行。没有数组,没有字符串,只有已经存在的内容。我的问题是,在规则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!");

问题在于这段代码-

int lotteryDigit1 = lottery % 100;
对于彩票=554,lotteryDigit1将设置为54。类似地,guessDigit1设置为42。相反,彩票%10应该给你这里的最低有效数字


注意-在本例中,很容易发现此缺陷,但学习如何使用调试器将有助于您在将来解决类似问题。

因此,在本例中,有几个非常小的错误。当你试图得到数字1时,你可以按100进行模运算。我相信你的意思是模10得到1的数字。如果您知道如何进行调试,您可以通过放入调试器来查看,或者只需在解决bug时暂时打印出您拥有的值即可

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

        else if (guessDigit2 == lotteryDigit1 
                && guessDigit1 == lotteryDigit2
                && guessDigit3 == lotteryDigit3)
不比较正确的数字对

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");
}

}

好吧,我用Javascript提出了一个类似的解决方案:

日志“程序已启动…”; //背景 常量persist=true;//1.确保用户只输入一个数字,循环直到用户输入一个数字 //功能:生成3个随机数,介于1和10之间(含1和10) const generateNumbers==>{ var-arr=[]; 当arr.length<3时{ var r=数学floorMath.random*10+1; arr.pushr; } 返回arr; }; 常量winningNumbers=generateNumbers;//由3个中奖号码组成的数组 //功能:提示用户输入数字 const getUserNumber=type=,err==>{ var q=; 如果err.trim!=q=\n+err+\n; q+=输入您的; q+=类型; q+=数量; var inp=promptq; 如果persist&&inp!=null{ 如果inp.trim==| | isNaNinp.trim getUserNumbertype,则错误:输入无效!; } 返回inp; }; var userNumbers=[];//由3个用户选择的数字组成的数组 //循环用户输入 ['first'、'second'、'third'].前肢疼痛,i=>{ 设n=getUserNumber; userNumbers.pushNumbern; }; var correct=0;//存储正确的匹配项 var _winningNumbers=[…winningNumbers];//暂时储存中奖号码 //处理正确答案 userNumbers.forEachn=>{ let count=\u winningNumbers.filternum=>{ returnnum==n }.长度; 如果计数>=1{ 正确+=1; _winningNumbers.splice_winningNumbers.indexOfn,1; } }; //处理用户赢款 const getWinnings==>{ var赢款=; 开关正确{ 案例1: 奖金=100美元; 打破 案例2: 奖金=200美元; 打破 案例3: 赢款=500美元; 打破 违约: 赢款=$0; 打破 } 返还奖金; } //警报奖金 var resp=; resp+=计算机的编号为; resp+=winningNumbers.join; resp+=\n; resp+=您的猜测是; resp+=userNumbers.join; resp+=\n; resp+=你得到的; resp+=正确; resp+=右侧; resp+=\n; resp+=你赢了; resp+=获得奖金; //功能:显示对用户的响应并提示“是否再次播放?”? const showResponse=err==>{ var q=相应的; q+=\n\n; 如果err.trim!=q+=\n+err+\n; q+=再次播放?Y或N; var inp=promptq; 如果persist&&inp!=null{ 如果inp.trim==||!isNaNinp.trim showResponseError:输入无效!; } 如果inp.toLowerCase==“y”window.location.reload; }; 显示反应; 控制台。记录“中奖号码:”,中奖号码; console.log'selectednumbers:',userNumbers; 控制台。记录“正确的编号:”,正确; console.log'Amount won:',getWinnings; console.log“…程序已完成!”;