Угадай секретный номер Java

1
package edu.blastermind.model;

import java.util.Random;

/**
 * A NumberGuessingGame represents the rules of a simple "guess the number" type game.
 * 
 * @author 
 *
 */
public class GuessTheNumberGame {

    private int highest;
    private int secret;

    /**
     * Creates a new NumberGuessingGame with a secret number between 0 and highest.
     * 
     * @param highest the highest possible number for this game. Must be > 0.
     */
    public GuessTheNumberGame(int highest) {

        // TODO 1: perform a precondition check on the parameter highest
        if (highest <= 0) {
            throw new IllegalArgumentException
            ("highest number must be at least 1");
        }

        this.highest = highest;

        Random rng = new Random();

        this.secret = rng.nextInt(highest + 1);
    }

    /**
     * Checks to see if we've guessed correctly.
     * 
     * @param guess our guess (must be between 0 and getHighest())
     * @return true if the guess was correct, false otherwise
     */
    public boolean isGuessCorrect(int guess) {

        // TODO 2: perform a precondition check on the variable guess
        if (guess > this.highest || guess < 0) {
            throw new IllegalArgumentException
            ("Guess must be between 1 and 100");
        }

        return this.secret == guess;
    }

    /**
     * Checks to see if our guess is higher than the secret.
     * 
     * @param guess our guess (must be between 0 and getHighest())
     * @return true if our guess is higher than the secret, false otherwise
     */
    public boolean isGuessHigher(int guess) {

        // TODO 3: perform a precondition check on the variable guess
        if (guess > this.highest || guess < 0) {
            throw new IllegalArgumentException
            ("Guess must be between 1 and 100");
        }

        return this.secret < guess;
    }

    /**
     * Returns the highest value in the range of valid guesses.
     * 
     * @return the highest value in the range of valid guesses
     */
    public int getHighest() {
        return this.highest;
    }
}

package edu.blastermind.controllers;

import java.util.Scanner;

import edu.westga.blastermind.model.GuessTheNumberGame;

public class GuessTheNumber {

    public static void main(String[] args) {

        GuessTheNumberGame game = new GuessTheNumberGame(100);
        int turns = 1;

        Scanner kb = new Scanner(System.in);

        System.out.println("Guess a nummber between 0 and 100");
        int guess = kb.nextInt();

        // TODO 4: loop as long as the guess is not correct
        while (!game.isGuessCorrect(guess)) {
            guess++;
        if (game.isGuessHigher(guess)){
            System.out.println("You guessed too high!");
            turns++;
        }
            else if (!game.isGuessCorrect(guess)){
                System.out.println("You guessed too low!");
            }
            int GuessTheNumber = kb.nextInt();
        }
            turns++;

        // TODO 5: in the loop, check guesses and give hints

        System.out.printf("You guessed the number in %d turns\n", turns);
    }
}

Привет всем> Я пишу гадание о программе секретных номеров в java, и у меня возникают некоторые проблемы. Я продолжаю получать, что моя догадка слишком высока, когда я запускаю программу в первый раз, и после того, как я завершаю программу и запускаю ее снова, она говорит, что моя догадка слишком низкая. В цикле while это должно быть замкнуто до тех пор, пока угадание является неправильным числом, которое, я считаю, оно делает, но я, очевидно, что-то делаю неправильно. Любая помощь приветствуется, спасибо заранее.

Теги:
if-statement
while-loop

2 ответа

0
Лучший ответ

Исправление вашего основного метода. Вы немного пропустили переменные, добавив, что нужно угадать. И вы всегда проверяли первый вход пользователя.

public static void main(String[] args) {

    GuessTheNumberGame game = new GuessTheNumberGame(100);
    int turns = 0;

    Scanner kb = new Scanner(System.in);

    // TODO 4: loop as long as the guess is not correct
    while (true) {
        System.out.println("Guess a nummber between 0 and 100");
        int guess = kb.nextInt();
        if (game.isGuessHigher(guess)) {
            System.out.println("You guessed too high!");
        } else if (!game.isGuessCorrect(guess)) {
            System.out.println("You guessed too low!");
        }
        turns++;
        if (game.isGuessCorrect(guess)) break;
    }

    // TODO 5: in the loop, check guesses and give hints

    System.out.printf("You guessed the number in %d turns\n", turns);
}
  • 0
    Я пытаюсь это сейчас, спасибо за вашу помощь, сэр
  • 0
    Вы скопировали код как есть? Возможно, вы добавили на одну фигурную скобку больше, чем нужно. Я скомпилировал и запустил его.
Показать ещё 4 комментария
2

Ваша петля проверяет правильность guess. И если guess неверно, вы читаете новое значение из командной строки и назначаете его GuessTheNumber вместо того, чтобы назначать его для guess.

Я также не понимаю, почему вы делаете guess++. Это не имеет смысла.

  • 0
    Я считаю, что он пытается отследить количество догадок, которые дал пользователь. К OP: назначьте количество догадок другому int .
  • 0
    @JB Низет, я увеличивал количество предположений от пользователя, поэтому я назначил новое значение для GuessTheNumber?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню