Проверка пользовательского ввода из сканера, который добавляется в массив - PullRequest
0 голосов
/ 17 октября 2018

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

Я пытаюсь написать свою программу так, чтобы после каждого вопроса пользовательский ответ загружался в массив, если только он не вводит что-то кроме "A", "B", "C"или "D".Если они не введут одно из этих значений, вопрос будет задан снова.Я застрял

Вот мой код:

String[] testAnswers = {"B","D","A","A","C","A","B","A","C","D"};
int uT = testAnswers.length; 
String[] userAnswers = new String[uT];

for (int i=0; i<uT;i++) {
System.out.print("Question #"+(i+1)+": ");

userAnswers[i] = in.nextLine();
userAnswers[i] = userAnswers[i].toUpperCase();

}

Я попытался создать список массивов, а затем с помощью цикла if снова запросить Q.Дело в том, что я не очень хорошо знаком с ArrayLists.

for (int i=0; i<uT;i++) {
    System.out.print("Question #"+(i+1)+": ");
    userAnswers[i] = in.nextLine();
    userAnswers[i] = userAnswers[i].toUpperCase();


    List<String> list = Arrays.asList(userAnswers);
    while (!list.contains("A") || !list.contains("B") || !list.contains("C") 
    || !list.contains("D")) {
    System.out.println("Invalid Input. ");
    System.out.print("Question #"+(i+1)+": ");
    userAnswers[i] = in.nextLine();
    userAnswers[i] = userAnswers[i].toUpperCase();
    }
}

Еще одна вещь, которую я пробовал, это использование логической переменной и / или использование цикла do / while, но я просто не могу понятьчто делать.Я думаю, это тот факт, что я поместил userInput прямо в массив, который нарушает мой код.

boolean isValid = true;
do {
    for (int i=0; i<uT;i++) {
        System.out.print("Question #"+(i+1)+": ");
        isValid = false;
        userAnswers[i] = in.nextLine();
        userAnswers[i] = userAnswers[i].toUpperCase();
    try {
    //something here
    }
...

Ответы [ 2 ]

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

Я бы выбрал что-то вроде этого:

for (int i=0; i<uT;i++) {
    System.out.print("Question #"+(i+1)+": ");
    String userCurrentAnswer = in.nextLine();

    while (!userCurrentAnswer.matches("(?i)[A|B|C|D]")) {
        System.out.println("Invalid Input. ");
        System.out.print("Question #"+(i+1)+": ");
        userCurrentAnswer = in.nextLine();
    }
    userAnswers[i] = userCurrentAnswer.ToUpperCase();
}

userCurrentAnswer.matches("(?i)[A|B|C|D]") для сопоставления любого из этих символов с учетом регистра

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

Используйте цикл while и увеличивайте его, только если ввод правильный

String[] testAnswers = {"B","D","A","A","C","A","B","A","C","D"};
int uT = testAnswers.length; 
String[] userAnswers = new String[uT];

int i = 0;
while(i<uT) {
    System.out.print("Question #"+(i+1)+": ");

    String input = in.nextLine();
    input = input.toUpperCase();
    if (input.equals ("A") || input.equals ("B") ...) {
        userAnswers[i] = input;
        i++;
    }
    else {
        System.out.println ("Enter again");
    }

}
...