Случайное число угадайку 456


Этот код хорошо работает, просто я довольно новыми для программирования, и я надеялся, что кто-то более опытный сможет ее осмотреть и дать мне несколько советов.

 * Author: Tyler Knight
 * Date Created: 02/07/2018
 * Program Purpose: Guessing game using
 * random numbers.
 **/


//Importing random and scanner classes
import java.util.Random;
import java.util.Scanner;

public class ElusiveNumbers {

    public static void main(String[] args) {

        //Declare variables
        Random num = new Random();
        int userInput;
        int answer;
        int count;
        int attempts;
        int restart;
        int terminate;
        int range;
        Scanner keyboard = new Scanner(System.in);

        //Whitespace
        System.out.println();
        System.out.println();

        try {

            //Greeting Message
            System.out.println("Welcome To Elusive Numbers!");

            //Whitespace
            System.out.println();

            //Prompt user to enter number range
            System.out.println("Enter the range of numbers you would like to guess from. EX: 5, 10, 100, 1000");

            //Whitespace
            System.out.println();

            //Allows User To Enter Range
            range = keyboard.nextInt();

            //Whitespace
            System.out.println();

            //Prompt user to enter in however many chances they would like to have
            System.out.println("Enter the amount of attempts you would like for this challenge");

            //Whitespace
            System.out.println();

            //Allows user to set amount of attempts
            attempts = keyboard.nextInt() - 1;

            //Whitespace
            System.out.println();

            //Prompt user to guess the number
            System.out.println("Enter a number between 1 and " + range);

            //Whitespace
            System.out.println();
            System.out.println();

            //Assign value to variables
            answer = num.nextInt(range) + 1;
            count = 0;



            /*
            * While the user input is not equal to the random generated number,
            * it will tell the user if their number was too high or too low,
            * it will also add 1 to the count variable every time user is wrong,
            * if the count variable becomes equal to 3 "Game Over" will display,
            * the user will then have the chance to try again or exit the game
            */


            do {
                //Assign value to variables
                userInput = keyboard.nextInt();
                restart = 1;
                terminate = 0;

                //If the count is higher than the attemps and user has not guessed the number, Game Over
                if (count >= attempts && userInput != answer) {

                    //If user guess is too low, output Too Low!
                    if (userInput < answer) {
                        //Whitespace
                        System.out.println();

                        System.out.println("Too Low!");

                    } 
                    //If user guess is too high, output Too High!
                    else if (userInput > answer) {
                        //Whitespace
                        System.out.println();

                        System.out.println("Too High!");
                    }

                    //Whitespace
                    System.out.println();

                    System.out.println("Game Over!");

                    //Whitespace
                    System.out.println();

                    System.out.println("To try again, type 1, to quit type 0");

                    //Whitespace
                    System.out.println();

                    userInput = keyboard.nextInt();

                    //Whitespace
                    System.out.println();

                    //If the user Chooses to restart the game will reset, Else the program will exit 
                    if (userInput == restart) {
                        count = 0;
                        answer = num.nextInt(range) + 1;

                        System.out.println("Enter the range of numbers you would like to guess from. EX: 5, 10, 100, 1000");

                        //Whitespace
                        System.out.println();

                        range = keyboard.nextInt();

                        //Whitespace
                        System.out.println();

                        System.out.println("Enter the amount of attempts you would like for this challenge");

                        //Whitespace
                        System.out.println();

                        attempts = keyboard.nextInt() - 1;

                        //Whitespace
                        System.out.println();

                        System.out.println("Enter a number between 1 and " + range + "\t");

                        //Whitespace
                        System.out.println();
                    }

                    else if (userInput == terminate) {
                        return;
                    }
                }

                // If the counter is at it's limit but the answer is correct it will not go to game over
                else if (count == 2 && userInput == answer) {
                    System.out.println("Great Job!");

                    System.out.println("To try again type 1, to quit type 0");

                    userInput = keyboard.nextInt();

                    //If user chooses to restart, everything will reset and game will start over
                    if (userInput == restart) {
                        count = 0; // Resets count
                        answer = num.nextInt(range) + 1; // Resets random number

                        System.out.println("Enter the range of numbers you would like to guess from. EX: 5, 10, 100, 1000");

                        //Whitespace
                        System.out.println();

                        range = keyboard.nextInt();

                        //Whitespace
                        System.out.println();

                        System.out.println("Enter the amount of attempts you would like for this challenge");

                        //Whitespace
                        System.out.println();

                        attempts = keyboard.nextInt() - 1;

                        System.out.println("Enter a number between 1 and " + range + "\t");

                        //Whitespace
                        System.out.println();

                    } 
                    else if (userInput == terminate) {
                        return;
                    }
                }

                else if (userInput > answer) {

                    //Whitespace
                    System.out.println();

                    System.out.println("Too high!");

                    //Whitespace
                    System.out.println();

                    count = count + 1;

                }

                else if (userInput < answer) {

                    //Whitespace
                    System.out.println();

                    System.out.println("Too Low!");

                    //Whitespace
                    System.out.println();

                    count = count + 1;
                }

                //If guess is equal to random number, user wins and chooses whether or not to restart.
                else if (userInput == answer) {

                    System.out.println("Great Job!");

                    System.out.println("To try again type 1, to quit type 0");

                    userInput = keyboard.nextInt();

                    if (userInput == restart) {

                        count = 0; //Resets count
                        answer = num.nextInt(range) + 1; //Resets random number

                        System.out.println("Enter the range of numbers you would like to guess from. EX: 5, 10, 100, 1000");

                        //Whitespace
                        System.out.println();

                        range = keyboard.nextInt();

                        //Whitespace
                        System.out.println();

                        System.out.println("Enter the amount of attempts you would like for this challenge");

                        //Whitespace
                        System.out.println();

                        attempts = keyboard.nextInt() - 1;

                        //Whitespace
                        System.out.println();

                        System.out.println("Enter a number between 1 and " + range + "\t");

                        //Whitespace
                        System.out.println();

                    } 
                    else if (userInput == terminate) {
                        return;
                    }
                }
            }
            while (userInput != answer || count < attempts);
        }
        //Exception Handler
        catch (Exception all){
            System.out.println("Please enter a valid integer and try again.");
        }
    }


273
1
задан 11 февраля 2018 в 01:02 Источник Поделиться
Комментарии
3 ответа


  • Не повторяйся
    С 3-го вхождения последовательности, как добавить места на экране, подскажите пользователя, анализирует intвы должны абстрактной, что:

    /** Prompt for an int. */
    static int promptInt(Scanner keyboard, String prompt) {
    System.out.println();
    System.out.println(prompt);
    System.out.println();

    while (!keyboard.hasNextInt()) {
    keyboard.next();
    System.out.println("try again:");
    }
    return keyboard.nextInt();
    }


  • использовать попытки с ресурсами:

    try (Scanner keyboard = new Scanner(System.in)) {
    System.out.println("Welcome To Elusive Numbers!");
    range = promptInt(keyboard, "Enter the range of numbers "
    + "you would like to guess from. EX: 5, 10, 100, 1000");

    attempts = promptInt(keyboard, "Enter the amount of attempts "
    + "you would like for this challenge") - 1;

    answer = promptInt(keyboard, "Enter number to be guessed "
    + "between 1 and " + range) + 1;


  • Не повторяйся
    код повторяется после If the user Chooses to restart

Я устал прокручивать все эти строки после этого - еще одна вещь:
в самом конце, вы


  • поймать все Exceptionы: опасные

  • сообщить пользователю "Please enter a valid integer and try again."но завершить выполнение
    такое поведение может поднять презирает

2
ответ дан 11 февраля 2018 в 08:02 Источник Поделиться

Вы находитесь в хорошем месте. Некоторые советы, чтобы сделать ваш код лучше:


  1. Начните с помощью IDE

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


  2. Не используйте комментарии

    Ваш код должен быть очевидны, особенно в тот небольшой части кода. Вы можете избежать комментируя создание соответствующей структуры и методов класса.

    В ваш код, я создал новый способ:

    private static void addWhitespace() {
    System.out.println();
    }

    Небольшое изменение, но благодаря тому, что Я заменил все 33 System.out.println(), некоторые из которых был с комментарием //Whitespace. Мы сэкономить пространство и код более читабельным.


  3. Не пишите сложные и долгие способы

    Ваша программа имеет более чем 200 строк кода и никаких методов. Это трудно читать. Вы можете разделить его на несколько частей, таких как линии о запуске сообщений для пользователя. Вы можете извлечь его в отдельный метод. Также, если вы написать несколько вложенных логика, как for inside for inside if и т. д., разделить его на различные методы.


ОК, на данный момент этого должно быть достаточно. Пожалуйста, покажите следующей версии код :)

1
ответ дан 11 февраля 2018 в 07:02 Источник Поделиться

что бы я действительно порекомендовал бы разделить ваш код в sepreate блоки кода... что увеличивает читаемость и уменьшает сложность...

do {
...
if (count >= attempts && userInput != answer) {

//If user guess is too low, output Too Low!
if (userInput < answer) {
printTooLow();
}
//If user guess is too high, output Too High!
else if (userInput > answer) {
printTooHigh();
}
printGameOver();
userInput = keyboard.nextInt();

//If the user Chooses to restart the game will reset, Else the program will exit
if (userInput == restart) {
reStart();
}
...
}
...
}while (userInput != answer || count < attempts);

это позволяет повторно использовать код. вы можете использовать printTooHigh() позже снова...

и что действительно отделяет код в соответствующие блоки (в вашем случае: методами)

Примечание: приведенный выше код-это просто пример того, как можно изменить свой код.

1
ответ дан 13 февраля 2018 в 07:02 Источник Поделиться