CodingQuest Ответов: 1

Мой код постоянно перескакивает через строку! Пожалуйста, пожалуйста, помогите! Т_Т


Итак, сам вопрос очень длинный, так что я собираюсь дать только ту информацию, которую вам нужно знать:

1. Я запускаю снаряд через стену.
2. после каждого запуска пользователь должен иметь возможность выбрать, играть ли снова или выйти из игры.


Переменные, которые я использую (которые вам нужно знать):
boolean GameOn
int angle;
int speed;
String choice;

Вам также, вероятно, следует знать, что мой сканер называется "sc"


Так вот что происходит (читайте комментарии):
while (GameOn = true) 

    //Computer sets height and distance
    Wall myWall = new Wall();
    System.out.println(myWall.toString());

    //User sets angle and speed
    System.out.print("Thus, enter this angle and speed.");
    angle = sc.nextInt();
    speed = sc.nextInt();

    //Once the user clicks enter, they have launched their projectile.
    //I call a method called "reach" to check if their projectile makes it over the wall.
    //I tell the user if they did good or not
    //Then ask them to choose whether to guess again, pass this round or quit completely.
    if ((myWall.reach(angle, speed) - myWall.getHeight())>= 4) {
        score+=2;
        System.out.println("You went a little too far over but good job!");
        System.out.println("Do you want to play again or quit?");
        choice = sc.nextLine();
        System.out.println("it passes the choice");
            if (choice == "play again") {
                myWall.setNewWall();
            }
            else if (choice == "quit") {
                GameOn = false;
                break;
            }
        }


И вот в чем моя проблема! По какой-то причине вместо того, чтобы программа ждала, когда пользователь введет свой выбор, моя программа создает новую стену! Он просто перескакивает через нее
choice = sc.nextLine();
по какой-то причине!

И знаете почему? Может кто-нибудь помочь? И, пожалуйста, скажите мне, если вам нужно, чтобы я включил свой полный код. Мой исходный код не очень длинный, но эта версия довольно фрагментирована, так что вы получаете только главное.

Еще раз прошу Вас, пожалуйста, помогите. Я застрял на этом в течение последних трех дней, и мой проект скоро должен быть готов. Большое вам спасибо, если вы можете помочь!

Что я уже пробовал:

что я пробовал? Смотрите выше код, который я пробовал!

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
По какой-то причине вместо того, чтобы программа ждала, когда пользователь введет свой выбор, моя программа создает новую стену!

Причина в том, что буфер клавиатуры не пуст.
angle = sc.nextInt();
speed = sc.nextInt();

Когда ваша программа читает angle и speed в виде целых чисел сканер считывает только то, что необходимо
Таким образом, конец строки или то, что было набрано, остается в буфере, ожидая, когда его потребят. Что и делается, когда
choice = sc.nextLine();

Добавление a sc.nextLine() после прочтения speed это должно решить проблему.

Если вы используете отладчик, вы увидите, что choice что-то получается.