Java驱动程序许可程序 - 无法显示我错过的问题

时间:2015-03-28 21:17:36

标签: java

我根据以下说明创建了我的程序。当我运行我的程序时,我输出的错误答案是我错过的。例如,如果我输入所有正确答案但#19,则在输出数据的错误答案部分中输入1或2。我做错了什么?


当地驾驶执照办公室已要求您编写一个程序,对许可证考试的书面部分进行评分。考试有20个多项选择题。这是正确的答案:

1. B    2. D    3. A    4. A
5. C    6. A    7. B    8. A
9. C    10. D   11.B    12. C
13. D   14. A   15. D   16. C
17. C   18. B   19. D   20. A

学生必须正确回答20个问题中的15个问题才能通过考试。

编写一个名为DriverExam的类,它在数组字段中保存正确的考试答案。该课程应该有一个数组字段来保存学生的答案。该类应具有以下方法:

通过。如果学生通过考试,该方法返回true,否则返回false totalCorrect:返回正确回答的问题的总数 totalIncorrect:返回错误回答的问题总数 questionsMissed:一个int数组,包含学生错过的问题的问题编号 在测试程序中演示该课程,要求用户输入学生的答案,然后显示从DriverExam课程方法返回的结果。

Input validation: only accept the letters A, B, C, or D as answers

这是我的输出数据:

    Driver's License Exam 
 20 Multiple-Choice Questions 
       Mark A, B, C, D   
1: B
2: D
3: A
4: A
5: C
6: A
7: B
8: A
9: C
10: D
11: B
12: C
13: D
14: A
15: D
16: C
17: C
18: B
19: D
20: C
  RESULTS  
Total Correct: 19
Total Incorrect: 1
Passed: YES
The incorrect answers are: 
 2

public class DriverExam
{
   //An array containing a student's answers
   private String[] correctAnswers = 
                                 {"B", "D", "A", "A", "C", "A", 
                                  "B", "A", "C", "D", 
                                  "B", "C", "D", "A", 
                                  "D", "C", "C", "B", "D", "A"}; 

   //Store the user's answers
   private String[] userAnswers; 
   int[] missed = new int[correctAnswers.length]; 

   //Process the user's answers
   public DriverExam (String[] Answers)
   {
      userAnswers = new String[Answers.length]; 

      for (int i = 0; i < Answers.length; i++)
      {
         userAnswers[i] = Answers[i]; 
      }
   }

   //Returns a boolean value if correct answers > 15 
   public boolean passed()
   {
      if (totalCorrect() >= 15)
         return true; 
      else
         return false; 
   }

   //Determines the total correct answers
   public int totalCorrect()
   {
      int correctCount = 0; 

      for (int i = 0; i < correctAnswers.length; i++)
      {
         if (userAnswers[i].equalsIgnoreCase(correctAnswers[i]))
         {
            correctCount++; 


            }
          }
          return correctCount; 
       }

       //Determines the total incorrect answers
       public int totalIncorrect()
       {
          int incorrectCount = 0; 

          for (int i = 0; i < correctAnswers.length; i++)
          {
             if (!userAnswers[i].equalsIgnoreCase(correctAnswers[i]))
             {
                missed[incorrectCount] = 1; 
                incorrectCount++; 
             }
          }
          return incorrectCount; 
       }

       //Missed questions
       public int[] questionsMissed()
       {
          return missed; 
       }

    }
    //end of DriverExam class

----------------------------------------------------------------------------


import java.util.Scanner; 

public class DriverExamApplication
{
   public static void main(String[] args)
   {
      System.out.println("    Driver's License Exam "); 
      Scanner input = new Scanner(System.in); 

      System.out.println(" 20 Multiple-Choice Questions "); 
      System.out.println("       Mark A, B, C, D   "); 

      //Inputting string
      String[] answers = new String[20]; 
      String answer; 

      for (int i = 0; i < 20; i++)
      {
         do
         {
            System.out.print((i+1) + ": "); 
            answer = input.nextLine(); 
         } while (!isValidAnswer(answer)); 

         answers[i] = answer; 
      }

      //Process
      DriverExam exam = new DriverExam(answers); 

      //Results
      System.out.println("  RESULTS  "); 

      //Outputting total correct
      System.out.println("Total Correct: " + exam.totalCorrect()); 

      //Outputting total incorrect
      System.out.println("Total Incorrect: " + exam.totalIncorrect()); 

      String passed = exam.passed() ? "YES" : "NO"; 

      //Result pass or fail
      System.out.println("Passed: " + passed); 

      if (exam.totalIncorrect() > 0)
      {
          System.out.println("The incorrect answers are: "); 

          int missedIndex; 

          for (int i = 0; i < exam.totalIncorrect(); i++)
          {
            missedIndex = exam.questionsMissed()[i]+1; 
            System.out.print(" " + missedIndex); 
          }
      }
   } //end of main function

   //Returns true when answer is valid
   public static boolean isValidAnswer (String answer)
   {
      return "A".equalsIgnoreCase(answer) || 
         "B".equalsIgnoreCase(answer)
         || "C".equalsIgnoreCase(answer) || 
         "D".equalsIgnoreCase(answer); 
   }
} //end of Test class

1 个答案:

答案 0 :(得分:0)

问题在于totalIncorrect函数,您始终指定1而不是i。这应该有效:

   //Determines the total incorrect answers
   public int totalIncorrect()
   {
      int incorrectCount = 0; 

      for (int i = 0; i < correctAnswers.length; i++)
      {
         if (!userAnswers[i].equalsIgnoreCase(correctAnswers[i]))
         {
            missed[incorrectCount] = i; 
            incorrectCount++; 
         }
      }
      return incorrectCount; 
   }