[BEGINNER] установить al oop в переключателе по умолчанию - PullRequest
0 голосов
/ 28 февраля 2020

В качестве моего первого маленького проекта я пытаюсь настроить тест. Я написал метод для генерации вопросов и ответов. Сейчас я пытаюсь заставить пользователя ввести 1 или 2, чтобы продолжить, и l oop, пока он этого не делает. Я немного потерян в этот момент. Я что-то упускаю действительно очевидное?

public static boolean generateQuestion2(String question, String answer1, String answer2) {
    boolean bingo;
    System.out.println(question);
    System.out.println("(1) " + answer1);
    System.out.println("(2) " + answer2); //bingo

    Scanner scan1 = new Scanner(System.in);
    int antwort = scan1.nextInt();

    switch (antwort) {
        case 1:
            System.out.println("Falsch...");
            return bingo = false;

        case 2:
            System.out.println("Richtig!");
            return bingo = true;

        default:
            // Here I intend to loop while antwort != 1 and 2
            while (antwort != 1 && antwort != 2) {
                System.out.println(" Bitte 1 doer 2 eintippen");
                return bingo = false;
            }
            return bingo = false;
    }
}

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

В l oop нет ничего, что можно изменить antwort, вам нужно перечитать его с scan1.

Кроме того, вы безоговорочно возвращаетесь из функции внутри функции. Это немедленно вернет.

И l oop, вероятно, должно быть круглым целым switch.

Наконец, только для двух значений я бы предпочел использовать простой if ... else if.

0 голосов
/ 28 февраля 2020

Сделайте это следующим образом:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(generateQuestion2("x", "y", "z"));
    }

    public static boolean generateQuestion2(String question, String answer1, String answer2) {
        boolean bingo = false;
        boolean valid = true;
        System.out.println(question);
        System.out.println("(1) " + answer1);
        System.out.println("(2) " + answer2); // bingo

        Scanner scan1 = new Scanner(System.in);
        int antwort = scan1.nextInt();
        do {
            valid = true;
            switch (antwort) {
            case 1:
                System.out.println("Falsch...");
                bingo = false;
                break;
            case 2:
                System.out.println("Richtig!");
                bingo = true;
                break;
            default:
                valid = false;
                System.out.println(" Bitte 1 doer 2 eintippen");
                antwort = scan1.nextInt();
            }
        } while (!valid);
        return bingo;
    }
}

Пробный прогон:

x
(1) y
(2) z
4
 Bitte 1 doer 2 eintippen
3
 Bitte 1 doer 2 eintippen
2
Richtig!
true

Другой пробный прогон:

x
(1) y
(2) z
4
 Bitte 1 doer 2 eintippen
3
 Bitte 1 doer 2 eintippen
1
Falsch...
false

Еще один пробный прогон:

x
(1) y
(2) z
1
Falsch...
false

Еще один пробный прогон:

x
(1) y
(2) z
2
Richtig!
true
0 голосов
/ 28 февраля 2020

Вы вернетесь в свой l oop, так что вы выйдете из метода, и l oop остановится. Что вам нужно в этом l oop, так это ждать ввода пользователя int antwort = scan1.nextInt();. Когда ввод получен, вы хотите вернуться к своему переключателю.

Примерно так ...

// here we wait for input
int antwort = scan1.nextInt();
while (true) {
  if (antwort == 1 || antwordt == 2) {
    return processAntwort(antwort);
  } else {
    System.out.println(" Bitte 1 doer 2 eintippen");
    // here again we wait for input
    antwort = scan1.nextInt();
  }
}
private boolean processAntwort(int antwort) {
  return antwort == 2;
}
...