Почему мой цикл do-while прерывается слишком рано в Java? - PullRequest
0 голосов
/ 10 октября 2018

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

  1. Я взял время (выбор == 1) и поместил это в случай 1.
  2. Я взял время (выбор == 1) и просто использовал переключательс переключателем и используется оператор continue.
  3. Когда я беру последние два перерыва, я получаю бесконечный цикл.

Любые подсказки о том, что я делаю, будут полезны.

package Spook;

import java.util.Scanner;

public class House {

    Scanner in = new Scanner(System.in);

    static void p(String I) {
        System.out.println(I);
    }

    public void game() {

        p("\nWelcome To Spook House, were all Spooks will haunt you.");

        do {
            p("\nPlease make your selection");
            p("         1.  Enter House for some Scares.");
            p("         2. Too Scared to Enter.");
            p("         3. Really Scared Please let me exit.");
            p("Choose one please.");

            char choice = in.next().charAt(0);

            switch (choice) {
                case '1':
                    p("\nAs prepare to enter the house, The door slowly creaks open.");
                    p("\nYou enter the house and the door slams shut.");
                    p("What do you do????");
                    p("         1. Try to open the door.");
                    p("         2. Find the nearist closet and hide.");
                    p("         3. Continue onward.");
                    p("         4. Faint and end game.");
                    break;
                case '2':
                    p("\nWhat are you a chicken, Just press 1!!!!!");
                    break;
                case '3':
                    p("\nFine you win chicken, now ending.");
                    System.exit(0);
                    break;
            }
            while (choice == '1') {
                switch (choice) {
                    case '1':
                        p("\nAs you twist the door knoob and try to pull it open. You feel a gust of wind that pushes you down.");
                        break;
                    case '2':
                        p("\nYou run towards the closet hoping to hide till daylight.");
                        p("You start to shake and laugh nerviously.");
                        break;
                    case '3':
                        p("\nYou explore the first room.");
                        p("You see an old crooked picture of a scary clown.");
                        break;
                    case '4':
                        p("\nYou have been easily to SPOOKED MMMMUUUUHHHHAAAAHHAAAA!!!!!");
                        System.exit(0);
                        break;
                }
                break;
            }
            break;
        } while (true);
    }
}

Ответы [ 4 ]

0 голосов
/ 10 октября 2018

Итак, что делает ваш код, он печатает первый текстовый блок с надписью «Пожалуйста, сделайте свой выбор» и тремя вариантами.Затем вы получаете пользовательский ввод (поэтому '1').

Он вводит первый оператор switch и переходит в case '1'.Он печатает то, что ему нужно, и вырывается из этого оператора switch.

Затем вы переходите в цикл while (choice == '1').Здесь вы вводите второй switch case немедленно, без ожидания и получения нового ввода.Поскольку вы не ждете и не получаете новый ввод, значение choice по-прежнему '1'.

Для этого во втором switch case вы сразу вводите case '1'.В этом случае он печатает то, что нужно для печати.Затем вы выходите из этого switch case, выходите из цикла while (choice == '1') и, наконец, выходите из цикла do while.

0 голосов
/ 10 октября 2018
                    System.exit(0);
                    break;

можно записать как

                    return;
0 голосов
/ 10 октября 2018

Вам не хватает строки кода, где вы просите пользователя для следующего ввода.Попробуйте это:

switch (choice) {
            case '1':
                p("\nAs prepare to enter the house, The door slowly creaks open.");
                p("\nYou enter the house and the door slams shut.");
                p("What do you do????");
                p("         1. Try to open the door.");
                p("         2. Find the nearist closet and hide.");
                p("         3. Continue onward.");
                p("         4. Faint and end game.");
                choice = in.next().charAt(0);
                break;

С этой строкой у пользователя снова запрашивается ввод, и после этого приложение закрывается.

0 голосов
/ 10 октября 2018

Попробуйте использовать разрыв внутри, если условие должно работать нормально

Пример:

if(choice == '4')
  break;
...