Задать вопрос
@dyrtage6

Почему меняется рандомное значение в java?

Делаю простую игру 'Угадай число'. В процессе выяснил, что почему то значение рандомной переменной постоянно меняется или что-то не так в проверке. 5f18a1aae466a274973165.jpeg
Вот как выглядит код -
package com.company;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // все переменные
        Scanner infoUser = new Scanner(System.in);
        int choise = 4;
        String name;

        // если что тут правила
        System.out.println("Угадай число #0.1");
        System.out.print("Как вас зовут: ");
        name = infoUser.nextLine();

        System.out.println(" ");
        System.out.println(name + " попал в самую суровую игру в мире - 'Угадай число'!");

        // бесконечно играем, до выхода
        while (choise != 0) {
            System.out.println("1. Легкий(от 1 до 100 за 6 попыток)");
            System.out.println("2. Средний(от 1 до 300 за 8 попыток)");
            System.out.println("3. Сложный(от 1 до 1000 за 11 попыток)");
            System.out.print("Выбери уровень игры: ");
            choise = infoUser.nextInt();
            switch (choise) {
                case 1:
                    level1();
                    break;
                case 2:
                    level2();
                    break;
                case 3:
                    level3();
                    break;
            }
        }
    }

        // 1 уровень
        public static void level1 () {
            System.out.println("Уровень игры: легкий. Введите число");
            for (int arr = 0; arr <= 5; arr++) {
                // постоянно спрашиваем число
                Scanner infoUser = new Scanner(System.in);
                final int random_number = 1 + (int) (Math.random() * 100);
                System.out.println(" ");
                System.out.print("Попробуй угадать: ");
                int userNum1 = infoUser.nextInt();

                // проверки
                if (userNum1 == random_number) {
                    System.out.println("Поздравляю! Вы угадали число за " + arr + " попыток");
                    System.out.println(" ");
                    break;
                } else if (random_number > userNum1)
                    System.out.println("Ваше число мальнькое");
                else if (random_number < userNum1)
                    System.out.println("Ваше число большое");

                if (arr == 5) {
                    System.out.println("Вы проиграли. Это было число " + random_number);
                    System.out.println(" ");
                    break;
                }
            }
        }

        // 2 уровень
        public static void level2 () {
            System.out.println("Уровень игры: средний. Введите число");
            for (int arr = 0; arr <= 7; arr++) {
                // постоянно спрашиваем число
                Scanner infoUser = new Scanner(System.in);
                final int random_number2 = 1 + (int) (Math.random() * 300);
                System.out.println(" ");
                System.out.print("Попробуй угадать: ");
                int userNum2 = infoUser.nextInt();

                // проверки
                if (userNum2 == random_number2) {
                    System.out.println("Поздравляю! Вы угадали число за " + arr + " попыток");
                    System.out.println(" ");
                    break;
                } else if (random_number2 > userNum2)
                    System.out.println("Ваше число мальнькое");
                else if (random_number2 < userNum2)
                    System.out.println("Ваше число большое");

                if (arr == 7) {
                    System.out.println("Вы проиграли. Это было число " + random_number2);
                    System.out.println(" ");
                    break;
                }
            }
        }

        // 3 уровень
        public static void level3 () {
            System.out.println("Уровень игры: сложный. Введите число");
            for (int arr = 0; arr <= 10; arr++) {
                // постоянно спрашиваем число
                Scanner infoUser = new Scanner(System.in);
                final int random_number3 = 1 + (int) (Math.random() * 1000);
                System.out.println(" ");
                System.out.print("Попробуй угадать: ");
                int userNum3 = infoUser.nextInt();

                // проверки
                if (userNum3 == random_number3) {
                    System.out.println("Поздравляю! Вы угадали число за " + arr + " попыток");
                    System.out.println(" ");
                    break;
                } else if (random_number3 > userNum3)
                    System.out.println("Ваше число мальнькое");
                else if (random_number3 < userNum3)
                    System.out.println("Ваше число большое");
                if (arr == 10) {
                    System.out.println("Вы проиграли. Это было число " + random_number3);
                    System.out.println(" ");
                    break;
                }
            }
        }
}

Как это исправить?
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Потому что
final int random_number = 1 + (int) (Math.random() * 100);

находится внутри цикла и выполняется на каждом шаге
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы