Сканер требует два входа перед возвратом - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть какой-то очень простой код, но я вырываю волосы.Я просто пытаюсь получить возврат AskQuestion () после того, как пользователь дает один ввод, но я не понимаю, почему этот код Java требует 2 ввода перед возвратом.Первоначально я пытался решить эту проблему с помощью цикла while, но я удалил все и обнаружил, как мне кажется, коренную проблему - возврат происходит только после второго ввода, но я не могу понять, почему.

import java.util.*;

public class RelationalQuestion extends Question {
    RelationalQuestion(Animal[] animals, Animal answer) {
        super(animals, answer);
    }

    public boolean AskQuestion() {

        Scanner q = new Scanner(System.in);
        boolean waitingForValidAnswer = true;
        boolean decideToDecrement = true;

        System.out.println("What do you want to know?");
        System.out.println("\t1. Is it heavier than another animal?");
        System.out.println("\t2. Is it taller than another animal?");
        System.out.println("\t9. Go back");

        if (q.hasNext());
            String relationalQuestionNumber = q.nextLine();

        return decideToDecrement;
    }// end AskQuestion
}// end RelationalQuestion

Не думаю, что это влияет на это, но вот как я вызываю AskQuestion () из другого файла.

 if (input.equals("1")) {

        RelationalQuestion q1 = new RelationalQuestion (animalArray, answer);
        q1.AskQuestion();
        if (q1.AskQuestion() == false) {
        questionsLeft++; //neutalize decrement of questions if returned false
        }
    }

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Ваша программа дважды показывает вопрос из-за того, что ваш код дважды вызывает функцию AskQuestion ().

q1.AskQuestion();                //call the first time the function
if (q1.AskQuestion() == false )  //call the second time the function

Я предлагаю сохранить результат в новой переменной и сравнить после этого.

Boolean result = q1.AskQuestion();
if(!result) { //.....// }

ИЛИ

Просто удалите первый звонок.

0 голосов
/ 30 ноября 2018
   q1.AskQuestion();
    if (q1.AskQuestion() == false) {

Вы вызываете AskQuestion два раза подряд.Вам, вероятно, следует избавиться от первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...