拥有用户输入名称然后回答12个多项选择测验,然后对其进行评分

时间:2013-02-27 01:59:34

标签: java arrays for-loop user-input equality

这就是我所拥有的:

import java.util.*;
import java.text.*;

public class Lab4 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System. in );
        Scanner keyboard = new Scanner(System. in );
        String input;
        int students;
        int correctAnswers = 0;

        char[] answerKey = {
            'B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D', 'B', 'A'
        };
        char[] userAnswers = new char[answerKey.length];

        DecimalFormat df = new DecimalFormat("#0.0");

        System.out.print("how many students are in your class?");
        input = s.nextLine();
        students = Integer.parseInt(input);

        String[] name = new String[students];

        for (int j = 0; j < students; ++j) {
            System.out.print("Enter name of student " + (j + 1) + ": ");
            name[j] = s.nextLine();

            System.out.print("Enter quiz score answers :");
            for (int k = 0; k < answerKey.length - 1; ++k) {
                userAnswers[k] = s.next().charAt(0);
            }

            for (int i = 0; i < userAnswers.length; i++) {

                if (userAnswers[i] == answerKey[i]) {
                    correctAnswers++;
                }

            }

            System.out.println((df.format((correctAnswers / answerKey.length) * 100)) + "%");

        }

    }

}

但是每次我输入12个答案(甚至是正确的答案)它只是进入下一行并且不打印任何其他内容,idk它有什么问题,我想也许userAnswers没有得到分配正确吗?

无论如何,任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:0)

一些事情:

  1. 这一行 for (int k = 0; k < answerKey.length -1; ++k) { 应改为 for (int k = 0; k < answerKey.length; ++k) { 否则你将错过用户的一个答案

  2. 执行此操作correctAnswers/answerKey.length时使用两个整数,因此结果将被截断为0.您应该使用double或float作为correctAnswers的类型,然后使用它来进行除法得到小数值。

答案 1 :(得分:0)

首先,光标转到下一行,是的,下一个println不打印(引自评论)。这是因为你只在循环外打印"Enter quiz score answers : "

尝试更改此行:

  System.out.print("Enter quiz score answers :");
  for (int k = 0; k < answerKey.length - 1; ++k) {
       userAnswers[k] = s.next().charAt(0);
  }

到:

  for (int k = 0; k < answerKey.length; ++k) {
          System.out.print("Enter quiz score answers : ");
          userAnswers[k] = s.next().charAt(0);                  
  }

其次,您的计算存在问题:

System.out.println((df.format((correctAnswers / answerKey.length) * 100)) + "%");

其中correctAnswersanswerKey.lengthint,因此correctAnswers / answerKey.length的结果为int。

correctAnswers = 4会怎样?它将首先计算4/12。由于两者都是int,因此结果为0。

尝试将该行更改为:

 System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");

答案 2 :(得分:0)

Scanner.next()使用分隔符来标记输入字符串。如果未使用Scanner.useDelimiter设置分隔符,则默认为空格。因此,您可以在输入时用空格分隔每个答案,也可以将分隔符设置为空字符串,以便分别获取每个字符。我怀疑可能是Scanner keyboard = new Scanner(System. in );行的用途 - 目前它没有使用,但可以与空分隔符一起使用来解析没有空格的答案字符串。

要查看我在说什么,请尝试输入以空格分隔的每个答案。您还可以尝试为12个答案中的每个答案输入“ab ab ab ...”(即12 x“ab”),您应该看到您的代码将在12“a”中作为答案读取。