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

いくつかのこと:

  1. この行 を次のfor (int k = 0; k < answerKey.length -1; ++k) { ように変更する必要があり for (int k = 0; k < answerKey.length; ++k) { ます。そうしないと、ユーザーから1つの回答が失われます。

  2. これを行うときは2つの整数を使用しているcorrectAnswers/answerKey.lengthため、結果は0に切り捨てられます。の型としてdoubleまたはfloatをcorrectAnswers使用し、それを使用して除算を行い、10進値を取得する必要があります。

于 2013-02-27T02:20:40.197 に答える
0

まず、カーソルが次の行に移動しますが、次の行printlnは印刷されません(コメントから引用)。"Enter quiz score answers : "これは、ループの外側で1回だけ印刷するために発生します。

この行を変更してみてください:

  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)) + "%");
于 2013-02-27T02:20:47.887 に答える
0

Scanner.next()区切り文字を使用して入力文字列をトークン化します。を使用して区切り文字を設定しない場合Scanner.useDelimiter、デフォルトは空白です。したがって、入力時に各回答を空白で区切るか、区切り文字を空の文字列に設定して、各文字が別々に使用されるようにすることができます。それがその行の目的である可能性があると思いますScanner keyboard = new Scanner(System. in );-現在は使用されていませんが、スペースなしで回答文字列を解析するために空の区切り文字とともに使用できます。

私が話していることを確認するには、各回答をスペースで区切って入力してみてください。また、12の回答(つまり、12 x "ab")のそれぞれに「abab ab ...」と入力してみると、コードが12の「a」で回答として読み取られることがわかります。

于 2013-02-27T02:49:58.807 に答える