java - 比较数组 - 方法中的累加器不会递增

标签 java arrays accumulator

在 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));

    }

只有当数组发现 userAnswers 中的字符串与 testAnswers 中的字符串相同时,我才尝试增加 var "same",而后一种方法中的 var "wrong"相同。

    /**
    * @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
}
}

最佳答案

您正在检查每个用户的答案是否与任何测试答案匹配。您应该只将它与一个答案进行比较:

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;

关于java - 比较数组 - 方法中的累加器不会递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52848223/

相关文章:

java - 如何将 "dynamically"对象类型的实例转换为其特定数据类型?

java - 选择哪个库在运行时生成类

java - 在 EMF 模型中使用 Java 关键字 volatile

javascript - Javascript 中具有多个值的动态键值数组

python - 从 cv2.HoughLines 获得 miximum 票数的 rho 和 theta

c++ - 如何以模板化方式获取二元函数的幂等值?

java - 如何检查所有textview文本在scrollview中是否可见

ruby - 如何进一步分解数组中的字符串

javascript - 循环到 php 数组的每一行

scala - 如何创建自定义列表累加器,即 List[(Int, Int)]?