有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

oop对随机生成的Java数字有问题

我正在研究Joyce Farrell的Java编程书中的这个项目,我对随机生成的数字和用户的猜测没有被正确检查有一个问题。例如,用户有3次猜测,假设他们的第一次猜测是2,第一个随机生成的数字是2,程序将打印出你输了。当猜测是正确的时候。请帮帮我。我已经添加了该计划的细节,以及我迄今为止所做的工作


创建彩票游戏应用程序。生成三个随机数(参见附录D中的帮助 这样做),每个都在0到9之间。允许用户猜测三个数字。比较每一个 用户对三个随机数的猜测,并显示一条消息,其中包括用户的 猜猜,随机确定的三位数,以及用户拥有的金额 赢了如下

配对号码奖(元)

任何一个匹配10 两个匹配100 三个匹配,不是为了1000 三个完全匹配,顺序是1000000

没有对手0

确保应用程序中包含重复的数字。例如,如果用户 猜测1、2和3,并且随机生成的数字是1、1和1,不会给用户 有三个正确的猜测——只有一个。将文件另存为彩票


我的源代码

// Filename: Lottery.java
// Written by: Andy A
// Written on: 14 January 2015

import java.util.Scanner;
import java.util.Random;

public class Lottery {

    public static void main(String[] args) {

        Scanner userInput = new Scanner(System.in);
        Random ranNum = new Random();

        // LIMIT Contains The Numbers From 0 - 9
        // TIMES Contains The Number of Time ranNum Should Run
        final int LIMIT = 9;
        final int TIMES = 3;

        // Users Guesses
        int usersFirstGuess;
        int usersSecondGuess;
        int usersThirdGuess;

        // Randomly Generated Numbers
        final int GenFirst = ranNum.nextInt(LIMIT);
        final int GenSecond = ranNum.nextInt(LIMIT);
        final int GenThird = ranNum.nextInt(LIMIT);

        // User is asked for 3 guesses
        System.out.println("Please enter your first guess: ");
        usersFirstGuess = userInput.nextInt();
        System.out.println("Please enter your second guess: ");
        usersSecondGuess = userInput.nextInt();
        System.out.println("Please enter your third and final guess: ");
        usersThirdGuess = userInput.nextInt();

        // Winning Amounts
        final double WinTen = 10;
        final double WinHun = 100;
        final double WinThund = 1000;
        final double WinMillion = 1000000;
        final int WinZero = 0;

        // Shows the randomly generated numbers
        for(int x = 0; x < TIMES; ++x)
            System.out.print(ranNum.nextInt(LIMIT) + " ");
        System.out.println();

        // First Generated
        if(GenFirst == usersFirstGuess ) {
            System.out.println("You have won: $" + WinTen);
        }
            else if(GenSecond == usersSecondGuess) {
                    System.out.println("You have won: $" + WinTen);
            }
            else if(GenThird == usersThirdGuess) {
                System.out.println("You have won: $" + WinTen);
            }
    }
}

共 (4) 个答案

  1. # 1 楼答案

    您正在使用ranNum.nextInt(LIMIT)打印新生成的数字,但是您正在将用户输入与GenXXX变量中存储的数字进行比较

    解决方案:打印变量

    System.out.println(GenFirst + " " + GenSecond + " " + GenThird);
    

    如果仍要使用循环打印,可以将数字存储在数组中

    // generate
    final int[] generated = new int[TIMES];
    for (int x = 0; x < TIMES; x++)
        generated[x] = ranNum.nextInt(LIMIT);
    
    // print
    for (int x = 0; x < TIMES; x++)
        System.out.print(generated[x] + " ");
    
  2. # 2 楼答案

    没错, 你为什么要打印

    System.out.print(ranNum.nextInt(LIMIT) + " ");
    

    当你应该只是打印的时候

    System.out.print(GenThird + " ");
    System.out.print(GenSecond + " ");
    System.out.print(GenFirst + " ");
    
  3. # 3 楼答案

    这应该能奏效

    // Filename: Lottery.java
    // Written by: Andy A
    // Written on: 14 January 2015
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    import java.util.Random;
    
    public class Lottery {
    
        public static void main(String[] args) {
    
            Scanner userInput = new Scanner(System.in);
            Random ranNum = new Random();
    
            // LIMIT Contains The Numbers From 0 - 9
            // TIMES Contains The Number of Time ranNum Should Run
            final int LIMIT = 9;
            final int TIMES = 3;
    
            // Users Guesses
            int usersFirstGuess;
            int usersSecondGuess;
            int usersThirdGuess;
            List<Integer> guesses = new ArrayList<>();
    
            // Randomly Generated Numbers
            final int GenFirst = ranNum.nextInt(LIMIT);
            final int GenSecond = ranNum.nextInt(LIMIT);
            final int GenThird = ranNum.nextInt(LIMIT);
    
            // User is asked for 3 guesses
            System.out.println("Please enter your first guess: ");
            usersFirstGuess = userInput.nextInt();
            guesses.add(usersFirstGuess);
            System.out.println("Please enter your second guess: ");
            usersSecondGuess = userInput.nextInt();
            guesses.add(usersSecondGuess);
            System.out.println("Please enter your third and final guess: ");
            usersThirdGuess = userInput.nextInt();
            guesses.add(usersThirdGuess);
    
            // Winning Amounts
            final double WinTen = 10;
            final double WinHun = 100;
            final double WinThund = 1000;
            final double WinMillion = 1000000;
            final int WinZero = 0;
    
            // Shows the randomly generated numbers
            System.out.println(GenFirst + " " + GenSecond + " " + GenThird);
            List<Integer> lottery = new ArrayList<>();
            lottery.add(GenFirst);
            lottery.add(GenSecond);
            lottery.add(GenThird);
    
            if (guesses.equals(lottery)) {
                System.out.println("You have won: $" + WinMillion);
            } else {
                int matchCount = 0;
                for (Integer guessValue : guesses) {
                    if (lottery.contains(guessValue)) {
                        matchCount++;
                        lottery.remove(guessValue);
                    }
                }
    
                switch (matchCount) {
                    case 0:
                        System.out.println("You have won: $" + WinZero);
                        break;
                    case 1:
                        System.out.println("You have won: $" + WinTen);
                        break;
                    case 2:
                        System.out.println("You have won: $" + WinHun);
                        break;
                    case 3:
                        System.out.println("You have won: $" + WinThund);
                        break;
                }
            }
        }
    }
  4. # 4 楼答案

    这不是随机生成的数字的问题,而是如果你想用你的方式向用户展示它们

    if / else if语句之前,在for循环中生成新的随机数。这意味着,与用户输入(genFirst)相比的数字可以是3,但在for循环中向用户显示的数字是一个新的随机数,例如2

    要解决此问题,应显示生成的数字,如下所示:

    for (int ranInt : new int[] { GenFirst, GenSecond, GenThird}) {
        System.out.println(ranInt);
    }
    

    这段代码创建了一个生成的数字数组,并在其中循环打印它们。显然,你也可以print GenFirst,然后print GenSecond,然后print GenThird

    我希望这有帮助