Бин go игра Java - PullRequest
       21

Бин go игра Java

1 голос
/ 18 января 2020

Я пытаюсь написать java код с помощью (bin go game), (bullseye game) правила просты:

компьютер выбирает 4 номера.
пользователь введите 4 числа.
необходимо проверить, что пользовательский ввод находится в диапазоне от 1 до 10; если пользовательский ввод существует в компьютерных случайных числах, он будет равен 1 быку, если число существует в том же месте, что и компьютерное случайное число, он покажет 1 «глаз»;
максимальное ограничение составляет 20 попыток, пока пользователь не будет рассмотрен » fail ";
нужно печатать каждый раунд, сколько быков было и сколько глаз было введено пользователем;

пример:

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

1 Ответ

0 голосов
/ 18 января 2020
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) с first вхождением 9 в randNumbers, которое равно 2, делая его ложным и не увеличивая глаза считать.

Поскольку у меня мало времени, и у вас есть это задание, и простое его копирование мало чему вас научит, я оставлю вам решение по этому конкретному c делу ( Я уже говорил вам, что не так, не будет трудно решить).

...