Написание программы, которая принимает входные данные от пользователя в виде массива и сравнивает его с другим массивом для проверки правильности ответов, используя цикл while - PullRequest
0 голосов
/ 06 ноября 2019

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

public class DriverExam{
public static final char[] ANSWER = {'B','D','A','A','C','A','B','A','C','D','B','C','D','A','D','C','C','B','D','A',};
private char[] driversAnswers;
InputReader reader;

public DriverExam(){
    reader = new InputReader();
    driversAnswers = new char[20];

}
public int getTotalCorrectAnswers(){
        int correct = 0;
        int index = 0;
        while (index < ANSWER.length){
            index++;
            if(driversAnswers.equals(ANSWER)){
                correct++;
            }
            System.out.println(index);
            System.out.println(correct);
        }
        return correct;

Скорее всего, проблема связана с оператором ifно я не могу найти способ перебрать индексы массивов и сравнить их с другим массивом.

РЕДАКТИРОВАТЬ: мой текущий метод выглядит следующим образом:

 public int getTotalCorrectAnswers(){
    int correctAnswer = 0;
    int index = 0;        
    while(index < ANSWER.length){
        if(ANSWER[index]==driversAnswers[index]){
            correctAnswer++; 
            index++;
        }            
        // System.out.println(index);
        System.out.println(correctAnswer);

    }
    return correctAnswer;

Для нескольких попыток я получил некоторые фактические подсчеты, но оказалось, что он остановит счетчик, как только он столкнулся с другимстоимость. Но, как сейчас обстоят дела, я застрял с результатом значение 0 *

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

сначала вы должны проверить, что размер обоих массивов должен быть равен, если это так, то вы можете напрямую использовать Arrays.equals метод для всех правильных ответов, иначе вы можете просмотреть правильный ответ,посмотрите на простую итерацию ниже

int correctAnswer = 0;
        if(ANSWER.length == driversAnswers.length){
            if(Arrays.equals(ANSWER,driversAnswers))
                System.out.println("correct answer: " + driversAnswers.length);
            else{
                for (int i=0;i<ANSWER.length;i++) {
                    if(ANSWER[i]==driversAnswers[i])
                        correctAnswer++;
                }
            System.out.println("correct answer: " + correctAnswer);
            }
        }

Вы можете использовать цикл там вместо для

int correctAnswer = 0,index=0;
    if(ANSWER.length == driversAnswers.length){
        if(Arrays.equals(ANSWER,driversAnswers))
            System.out.println("correct answer: " + driversAnswers.length);
        else{
            while (index<ANSWER.length) {
                if(ANSWER[index]==driversAnswers[index])
                    correctAnswer++;
                index++;
            }
        System.out.println("correct answer: " + correctAnswer);
        }
    }

Используйте это для справки

import java.util.Arrays; class Test{ public static void main(String[] args) { char[] ANSWER = {'B','D','A','A','C','A','B','A','C','D','B','C','D','A','D','C','C','B','D','A',}; char[] driversAnswers = {'x','D','A','A','C','A','B','A','C','D','B','C','D','A','D','C','C','B','D','A',}; int correctAnswer = 0,index=0; if(ANSWER.length == driversAnswers.length){ if(Arrays.equals(ANSWER,driversAnswers)) System.out.println("correct answer: " + driversAnswers.length); else{ while (index<ANSWER.length) { if(ANSWER[index]==driversAnswers[index]) correctAnswer++; index++; } System.out.println("correct answer: " + correctAnswer); } }<br> }<br> }

0 голосов
/ 06 ноября 2019

, как уже описано в комментариях, вы не можете сравнивать массивы, подобные этому. driverAnswers.equals(ANSWER) только сравнивает ссылки, в этом случае он вернет false, потому что ссылки разные. Если вы хотите проверить массив на равенство, вы можете использовать Arrays.equals(arr1, arr2). В этом случае метод equals вызывается для каждого элемента в массиве. Если объекты в массивах корректно переопределяют этот метод, этот метод вернет желаемый результат.

Однако вы упоминали, что не используете другие библиотеки. Тогда самым простым решением было бы выполнить итерацию по каждому элементу и проверить равенство

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

while(index < ANSWER.length){
    if(driverAnswer[index] == ANSWER[index])
        correct++
    index++
}
...