0

这就是我所拥有的:

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 个答案(甚至是正确的答案)时,它都会进入下一行并且不打印任何其他内容,我想知道它有什么问题,我想也许 userAnswers 没有正确分配?

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

4

3 回答 3

0

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

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

于 2013-02-27T02:49:58.807 回答
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,然后使用它进行除法以获得十进制值。

于 2013-02-27T02:20:40.197 回答
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)) + "%");

where correctAnswersand answerKey.lengthis int,所以结果correctAnswers / answerKey.length是 int。

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

尝试将该行更改为:

 System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");
于 2013-02-27T02:20:47.887 回答