Как выйти из вложенного цикла while в java?

РЕДАКТИРОВАТЬ: Поскольку моя программа все еще не работает, я опубликовал весь метод на случай, если возникнет другая проблема.

Я хочу выйти из этой программы, если пользователь вводит «n» при появлении запроса:

 char again = 'y';
        while (again == 'y' || again == 'Y')
        { 
        String ans = IBIO.inputString ("Unscramble: OBORSLW (Hint: Shellder latches onto its tail.) ");
        int tries = 0;

        while (!ans.toLowerCase ().equals ("slowbro"))
        {
            System.out.println ("Incorrect. Wrong answer. Try again.");
            tries++;
            ans = IBIO.inputString ("\nUnscramble: OBORSLW (Hint: Shellder latches onto its tail.) ");

            if (tries > 3)
            {
                System.out.println ("The correct answer was SLOWBRO.");
                again = IBIO.inputChar ("Play again? (y/n) ");
                break;
            }
        }

        System.out.println ("Correct.");

        System.out.println ("\nQuestion #2 - ");
        String ans2 = IBIO.inputString ("\nUnscramble: RVLEGERA (Hint: It rolls down slopes without slowing down.) ");
        int tries2 = 0;
        while (!ans2.toLowerCase ().equals ("graveler"))
        {
            System.out.println ("Incorrect. Wrong answer. Try again.");
            tries2++;
            ans2 = IBIO.inputString ("\nUnscramble: RVLEGERA (Hint: It rolls down slopes without slowing down.) ");

            if (tries2 > 3)
            {
                System.out.println ("The correct answer was GRAVELER.");
                again = IBIO.inputChar ("Play again? (y/n) ");

                if (again != 'y' || again != 'Y')
                    break;
            }
        }
        System.out.println ("Correct.");

        System.out.println ("\nQuestion #3 -");
        String ans3 = IBIO.inputString ("\nUnscramble: TYSGLA (Hint: It's almost invisible and is gaseous.) ");
        int tries3 = 0;
        while (!ans3.toLowerCase ().equals ("gastly"))
        {
            System.out.println ("Incorrect. Wrong answer. Try again.");
            tries3++;
            ans3 = IBIO.inputString ("\nUnscramble: TYSGLA (Hint: It's almost invisible and is gaseous.) ");

            if (tries3 > 3)
            {
                System.out.println ("The correct answer was GASTLY.");
                again = IBIO.inputChar ("Play again? (y/n) ");

                if (again != 'y' || again != 'Y')
                    break;
            }
        }
        printSlow ("Correct.");
        printSlow ("\nWell Done, " +name+ "! You have passed the test! I'm so happy for you!!");
        break;
    }
    }

Всякий раз, когда я намеренно ввожу ложное значение несколько раз, мне говорят правильный ответ, и я могу попробовать еще раз, если захочу. Эта часть работает. Однако, если я не хочу продолжать, программа просто продолжит работу сама по себе и перейдет к следующему вопросу. Как я могу остановить всю программу?


person lkjhgfdsa4321    schedule 06.04.2016    source источник
comment
System.exit(0); выходит из программы.   -  person RaminS    schedule 06.04.2016
comment
подождите, но я все еще хочу, чтобы игрок продолжал играть, если он нажмет «y»   -  person lkjhgfdsa4321    schedule 06.04.2016
comment
подождите, но иногда, даже когда я нажимаю y, он не зацикливается @Gendarme   -  person lkjhgfdsa4321    schedule 06.04.2016
comment
Ну, я думаю, это связано с IBIO.inputChar ("Play again? (y/n) "); я не знаю этот метод, поэтому я не знаю, что происходит внутри него.   -  person RaminS    schedule 06.04.2016
comment
@Gendarme Я отредактировал свой пост и опубликовал весь свой метод. Может быть, вы могли бы помочь найти проблему сейчас.   -  person lkjhgfdsa4321    schedule 07.04.2016
comment
@ElliottFrisch Я отредактировал свой пост и опубликовал весь свой метод. Может быть, вы могли бы помочь найти проблему сейчас   -  person lkjhgfdsa4321    schedule 07.04.2016


Ответы (2)


 char again = 'y';
    while (again == 'y' || again == 'Y')
    {
        String ans = IBIO.inputString ("Unscramble: OBORSLW (Hint: Shelder latches onto its tail.) ");
        int tries = 0;
        boolean flag= false;
        while (!ans.toLowerCase ().equals ("slowbro"))
        {
            System.out.println ("Incorrect. Wrong answer. Try again.");
            tries++;
            ans = IBIO.inputString ("\nUnscramble: OBORSLW (Hint: Shelder latches onto its tail.) ");

            if (tries > 3)
            {
                System.out.println ("The correct answer was SLOWBRO.");
                again = IBIO.inputChar ("Play again? (y/n) ");
                flag = true;
                break;
            }
        }
        if(flag==true){
        break;       
} 

ты это имеешь в виду?

person raser    schedule 06.04.2016
comment
ммм, когда я это делаю, я не могу повторить цикл, и когда я нажимаю n, моя программа переходит к следующему методу. так что нет, я не это имею в виду. - person lkjhgfdsa4321; 06.04.2016
comment
Я отредактировал свой пост и опубликовал весь свой метод. Может быть, вы могли бы помочь найти проблему сейчас - person lkjhgfdsa4321; 07.04.2016

РЕДАКТИРОВАТЬ: я изменил коды в соответствии с вашими требованиями. Пожалуйста, проверьте это.

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

Я нашел класс IBIO в Интернете и протестировал вашу программу, но она работает правильно.

Ниже мой код.

Основная.java:

public class Main {
    private static boolean verifyAnswer(String candidate, String answer) {
        if (candidate.toLowerCase().equals(answer))
            return true;
        else {
            System.out.println("Incorrect. Wrong answer. Try again.");
            return false;
        }
    }

    private static boolean playGame(int questionNumber, String answer, String question) {
        String candidate;
        System.out.println("Question #" + questionNumber + " - ");
        int tries = 0;
        do {
            tries++;
            if (tries > 3) {
                System.out.println("The correct answer was " + answer + ".");
                char again = IBIO.inputChar("Play again? (y/n) ");
                if (again != 'y' && again != 'Y')
                    System.exit(0);
                else
                    return false;
            }
            candidate = IBIO.inputString(question);
        } while (!verifyAnswer(candidate, answer));
        System.out.println("Correct.");
        return true;
    }

    public static void main(String[] args) {
        while (!playGame(1, "slowbro", "Unscramble: OBORSLW (Hint: Shellder latches onto its tail.) ")) ;
        while (!playGame(2, "graveler", "Unscramble: RVLEGERA (Hint: It rolls down slopes without slowing down.) ")) ;
        while (!playGame(3, "gastly", "Unscramble: TYSGLA (Hint: It's almost invisible and is gaseous.) ")) ;
    }
}

ИБИО.java:

//---- IBIO - Below are simplified input and output methods ----
//===========================================================
// IBIO Standard Input and Output
//  These methods must be copied into your program(s).
//===========================================================
public class IBIO {
    static void output(String info) {
        System.out.println(info);
    }

    static void output(char info) {
        System.out.println(info);
    }

    static void output(byte info) {
        System.out.println(info);
    }

    static void output(int info) {
        System.out.println(info);
    }

    static void output(long info) {
        System.out.println(info);
    }

    static void output(double info) {
        System.out.println(info);
    }

    static void output(boolean info) {
        System.out.println(info);
    }

    static String input(String prompt) {
        String inputLine = "";
        System.out.print(prompt);
        try {
            inputLine = (new java.io.BufferedReader(
                    new java.io.InputStreamReader(System.in))).readLine();
        } catch (Exception e) {
            String err = e.toString();
            System.out.println(err);
            inputLine = "";
        }
        return inputLine;
    }

    static String inputString(String prompt) {
        return input(prompt);
    }

    static String input() {
        return input("");
    }

    static int inputInt() {
        return inputInt("");
    }

    static double inputDouble() {
        return inputDouble("");
    }

    static char inputChar(String prompt) {
        char result = (char) 0;
        try {
            result = input(prompt).charAt(0);
        } catch (Exception e) {
            result = (char) 0;
        }
        return result;
    }

    static byte inputByte(String prompt) {
        byte result = 0;
        try {
            result = Byte.valueOf(input(prompt).trim()).byteValue();
        } catch (Exception e) {
            result = 0;
        }
        return result;
    }

    static int inputInt(String prompt) {
        int result = 0;
        try {
            result = Integer.valueOf(
                    input(prompt).trim()).intValue();
        } catch (Exception e) {
            result = 0;
        }
        return result;
    }

    static long inputLong(String prompt) {
        long result = 0;
        try {
            result = Long.valueOf(input(prompt).trim()).longValue();
        } catch (Exception e) {
            result = 0;
        }
        return result;
    }

    static double inputDouble(String prompt) {
        double result = 0;
        try {
            result = Double.valueOf(
                    input(prompt).trim()).doubleValue();
        } catch (Exception e) {
            result = 0;
        }
        return result;
    }

    static boolean inputBoolean(String prompt) {
        boolean result = false;
        try {
            result = Boolean.valueOf(
                    input(prompt).trim()).booleanValue();
        } catch (Exception e) {
            result = false;
        }
        return result;
    }
//=========== end IBIO ===========================================//

}

Моя среда: Intellij Community 2016.1.1 + jdk 8 + Windows 7 x64

person Juniver Hazoic    schedule 06.04.2016
comment
Я отредактировал свой пост и опубликовал весь свой метод. Может быть, вы могли бы помочь найти проблему сейчас @juniver - person lkjhgfdsa4321; 07.04.2016
comment
@lkjhgfdsa4321 Я думаю, что ваша проблема исходит от if (again != 'y' || again != 'Y'). Должно быть if (again != 'y' && again != 'Y'). В любом случае, я разместил более модульную кодовую базу на ваших полных кодах, чтобы удовлетворить ваши требования. Пожалуйста, проверьте это. - person Juniver Hazoic; 07.04.2016