1

我正在尝试使用(宾果游戏),(靶心游戏)编写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");
    }
}
4

1 回答 1

0
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 中第一次出现的 9 进行比较,即 2,使其为假并且不会增加眼睛计数。

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

于 2020-01-18T16:35:07.563 回答