【问题标题】:Bingo game Java宾果游戏 Java
【发布时间】:2020-01-18 15:32:52
【问题描述】:

我正在尝试使用(宾果游戏),(靶心游戏)编写 java 代码 规则很简单:

  • 计算机选择 4 个数字

  • 用户输入 4 个数字

  • 必须检查用户输入在 1 到 10 之间

  • 如果用户输入存在于计算机随机数中,则为 1 个公牛

  • 如果一个数字存在于计算机随机数字的同一位置,它将显示 1 个“眼睛”

最大限制为 20 次尝试,直到用户被视为“失败”;我需要通过用户输入打印每一轮有多少公牛和多少只眼睛;

例子:

if the pc randomizing 1 4 6 7
and the user type 3 4 1 7 
the output will be 3 bulls and 2 eyes.

我的代码在末尾打印 0 和 0。

感谢您的帮助!

这是我的代码:

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

public class ArraysEx1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Random r = new Random();
        int[] pcGuess = new int[4];
        int[] playerGuess = new int[4];
        int countGuess = 0, bulls = 0, eye = 0;
        final int maxGuess = 20;
        System.out.println("Please press enter to begin");
        in.nextLine();
        boolean areNumbersCorrect = true; // a boolean value to define if the user input are correct (values between 1 to 10)
        for (; countGuess < maxGuess; countGuess++) {
            System.out.println("Please enter 4 numbers between 1-10");
            for (int i = 0; i < playerGuess.length; i++) {
                playerGuess[i] = in.nextInt();
                pcGuess[i] = r.nextInt(10)+1;
                if (playerGuess[i] < 0 || playerGuess[i] > 10) { // an if statement to check if the user input are correct
                    areNumbersCorrect = false;
                    do {                                            // do while loop if the boolean is not true. (force the user to enter correct values)
                        System.out.println("Please try again");
                        for (int j = 0; j < playerGuess.length; j++) {
                            playerGuess[j] = in.nextInt();
                            if (playerGuess[j] > 0 && playerGuess[j] < 10) {
                                areNumbersCorrect = true;
                                continue;
                            }
                        }
                    } while (!areNumbersCorrect); // end of do while loop
                }
                for (int j=pcGuess.length; j>0; j--) { // for loop to check each number from the user and computer.
                    if (playerGuess[i] == pcGuess[i]) {
                        eye++;                             // if the user number exist in the same location evaluate eye++
                        if (playerGuess[i]%pcGuess[j]== 0) {
                            bulls++;                        // if the user number exist in the randomized number but not in the same location evaluate bulls++
                        }
                    }
                }
                System.out.println(
                        eye+" Hits!(same pc number and location)"+" And: "+bulls+" Numbers exist");
            } if(eye==4&&bulls==4) {
                break;
            }

        }
        System.out.println("It took you: "+countGuess+" Times to guess the numbers");
    }
}

【问题讨论】:

    标签: java arrays bullseye


    【解决方案1】:
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.Scanner;
    
    public class ArraysEx1 {
        public static void main(String[] args) {
            ArrayList<Integer> randNumbers = new ArrayList<>();
            Random random = new Random();
            String input;
            int number;
            Scanner sc = new Scanner(System.in);
            do {
                System.out.println("Please press enter to begin");
                input = sc.nextLine();
            }while (!input.equals(""));//loop while user doesn't press ENTER
    
            for (int i = 0; i < 4; i++){
                randNumbers.add(random.nextInt(10) + 1);//loop to fill the randNumbers arraylist with random numbers
            }
            /*
            randNumbers.add(3);
            randNumbers.add(2);
            randNumbers.add(9);
            randNumbers.add(9);
    
             */
            System.out.println("My random numbers: " + randNumbers.toString());
    
            int counter = 0;
            int bulls = 0;
            int eyes = 0;
            do {
                System.out.println("Please enter 4 numbers between 1-10");
                number = sc.nextInt();
                if (number > 0 && number <= 10){
                    //System.out.println("index of rand: " + randNumbers.indexOf(number));
                    //System.out.println("count: " + counter);
                    if (randNumbers.indexOf(number) == counter){
                        eyes++;
                        System.out.println("eyes++");
                    }else if (randNumbers.contains(number)){
                        bulls++;
                        System.out.println("bulls++");
                    }
                    counter++;
                    System.out.println("Number " + counter + " introduced. " + (4 - counter) + " more to go.");
                }else {
                    System.out.println("Wrong number.");
                }
            }while (counter < 4);//loop for user to introduce valid numbers
    
            System.out.println("You scored " + bulls + " bulls and " + eyes + " eyes.");
        }
    }
    

    试试这段代码。请注意,我使用的是 ArrayList 而不是数组,因为它提供了 .contains() 和 .indexof() 等方法。

    警告:如果 randNumbers 数组列表包含两个相等的数字,例如 3-2-9-9 数组,当您输入 9-9-9-9 作为您的数字猜测时,代码将失败。这是因为 .indexof() 方法:

    返回指定元素第一次出现的索引 在此列表中,如果此列表不包含该元素,则为 -1。

    意味着代码无法计算最后的 9,因为它会将计数索引 (3) 与 randNumbers 中 first 出现的 9 进行比较,即 2,使其为假且不会增加眼睛数。

    由于我时间不多,而且这是你的一个作业,只是复制它不会教给你太多东西,我将把它留给你来解决这个具体案例(我已经告诉你出了什么问题,赢了'不难解决)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2022-11-23
      • 2016-08-18
      • 2015-05-07
      • 1970-01-01
      • 2015-06-12
      • 2021-05-19
      相关资源
      最近更新 更多