Сравнение массивов - аккумулятор в методе не будет увеличиваться - PullRequest
0 голосов
/ 17 октября 2018

В методах totalCorrect () и totalIncorrect () я установил аккумулятор var для подсчета количества правильных или неправильных вопросов.По какой-то причине он не будет увеличиваться должным образом.Программа говорит, что пользователь получил 24 или 40 правильных и неправильных ... почему он не будет увеличиваться должным образом?

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class driverExam {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Driver's Test. Input your answers for the following 
10 Q's. ");
    System.out.println();

    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 userInput = in.nextLine();
        userInput = userInput.toUpperCase();
        if (userInput.equals("A")|| userInput.equals("B")|| 
    userInput.equals("C")
                || userInput.equals("D")) {
            userAnswers[i] = userInput;
            i++;
        }else {
            System.out.println("Enter again: ");
        }
    }           

    System.out.println("Here are the results.");
    int qRight = totalCorrect(userAnswers,testAnswers);
    System.out.println("Total Correct: "+qRight);
    int qWrong = totalIncorrect(userAnswers, testAnswers);
    System.out.println("Total Incorrect: "+qWrong);
    System.out.println(passed(qRight));

    }

Я пытаюсь увеличивать var "same", только когда массив находит, чтоСтрока в userAnswers такая же в testAnswers, и та же для var «неправильный» в последнем методе.

    /**
    * @param user
    * @param test
    * @return
    */
public static int totalCorrect(String[] user,String[] test) {
    int same=0;
    for (int r = 0;r<=user.length-1;r++) {
        for (int k =0;k<=test.length-1;k++) {
            if(user[r].equals(test[k])) {
                same++;
            }
        }
    }
    return same;    
}

/**
 * @param user
 * @param test
 * @return 
 */
public static int totalIncorrect(String[] user,String[] test) {
    int z=0;
    int wrong = 0;
    boolean isValid = true;
    while (isValid && z<user.length) {
        if (user[z]!=test[z]) {
            isValid = false;
            wrong ++;
            z++;
        }
        }
    return wrongQ;
    }

/**
 * @param numRight
 * @return //returns whether student has passed or failed
 */
public static String passed(int numRight) {
    int goldenNum = 8;
    if (numRight >=goldenNum) {
        return ("You passed.");
    }else
        return ("You have failed.");
}

/**
 * @param user
 * @param test
 * @return
 */
public static int[] questionMissed(String[] user, String[] test) {
    //return array which display which questions were missed
}
}

Ответы [ 2 ]

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

Вам нужен только 1 цикл для проверки 2 массивов (если их размер одинаков):

public static int totalCorrect(String[] user,String[] test) {
    int qRight = 0;
    for (int i = 0;i<user.length;i++) {
        if(user[i].equals(test[i])) {
            qRight++;
        }
    }
    return qRight;    
}

public static int totalIncorrect(String[] user,String[] test) {
    int qWrong=0;
    for (int i = 0;i<user.length;i++) {
        if(!user[i].equals(test[i])) {
            qWrong++;
        }
    }
    return qWrong;    
}

или вы можете повторно использовать метод totalCorrect:

public static int totalIncorrect(String[] user,String[] test) {
    int qRight=totalCorrect(user,test);

    return test.length - qRight;    
}
0 голосов
/ 17 октября 2018

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

public static int totalCorrect(String[] user,String[] test) {
    int same=0;
    for (int r = 0;r<=user.length-1;r++) {
        if(user[r].equals(test[r])) {
            same++;
        }
    }
    return same;    
}

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

int qWrong = userAnswers.length - qRight;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...