0

これは私がクラスのために取り組んでいるプログラムです。ほとんどのプログラムを作成した後、実行しようとしていますが、論理エラーがあるようです。なんらかの理由で、コンピューターは最初の for ループまで実行し、ユーザーに配列に値を入力するように求める scan.nextInt メソッドを無視します。

編集: 新しい問題: プログラムを実行すると、正しく実行されていないループは 2 番目の for ループです。何を入力しても、可能な合計正解数として合計正解数を返します。また、0% の正解を返します :(

編集2:正解率の問題を修正しましたが、クイズの採点時に入力された正解の入力値を比較する正しい方法についてはまだ途方に暮れています...常に正解数を返します正しいかどうかに関係なく、質問の総数になります。

import java.util.Scanner;
public class gradingQuizzes {

public static void main(String[] args)
{

    int numQuestions;           // number of questions on quiz
    int numCorrect = 0;         // number correct of entered values
    int correctAnswer;          

    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter the amount of questions in the Quiz: ");
    numQuestions = scan.nextInt();
    int[] key = new int[numQuestions];      // creates an array for the key to the quiz

    // Prompts the user to enter values into the key array
    for (int i = 0; i < key.length; i++)
    {
        System.out.println("Please enter the correct answer to question number " + (i + 1) + " : ");
        key[i] = scan.nextInt();
    }

    System.out.println("Please enter the answers for the quiz to be graded: ");
    System.out.println("---------------------------------------------------");

    // 'for' loop asking for the correct answer for each question on the quiz
    for (int i = 0; i < key.length; i++)
    {
        System.out.println("Question " + (i + 1) + " answer: ");
        correctAnswer = scan.nextInt();
        if (correctAnswer == key [i]);
        {
            numCorrect++;       // increments the number correct for each match to the key
        }
    }
    // Creates a variable to compute the percent correct on the quiz
    double percentCorrect = (numCorrect / (key.length));

    System.out.println("The number correct is: " + numCorrect);
    System.out.println("The percent correct: %" + percentCorrect);
}
4

4 に答える 4

2

サイズ 0 で配列を初期化しています (0 で初期化numQuestionsしていることに注意してください)。numQuestionsユーザー入力から値を取得した後、配列の初期化を移動するだけです。

numQuestions = scan.nextInt();
int[] key = new int[numQuestions];

/を使用して変数にdouble値を代入する場合 は、 /を(リテラル) にキャストするか、乗算する必要があります。そうしないと、浮動小数点の結果が/になります。コードのこの部分を変更します。intlongdoubleintlongdouble1.0intlong

double percentCorrect = ((numCorrect * 1.0) / ((key.length + 1) * 1.0) );

書式設定されたテキストを出力する場合は、 を使用する必要がありますSystem.out.printf。最終的なコードの例を書きます (言語文法に関して):

//System.out.println("The percent correct: %" + percentCorrect);
System.out.printf("The percent correct: %% %.2f\n", percentCorrect);

上記のリンクから:

  • %%%シンボルを印刷します
  • %.2f2つの固定小数を使用して浮動小数点数を出力します
  • \n改行を出力します
于 2013-03-06T02:54:14.200 に答える
0

を使用しているからですkey.length。配列には要素がないため、0 が返されます。

于 2013-03-06T02:53:51.477 に答える
0

あなたは宣言しました

int[] key = new int[numQuestions];  

numQuestions が 0 の場合

これはうまくいきます

    numQuestions = scan.nextInt();

   key = new int[numQuestions];  

質問の 2 番目の部分では、if ステートメントの末尾にセミコロンがあります。それを除く

if (correctAnswer == key [i]);
于 2013-03-06T02:54:06.073 に答える
0
int numQuestions = 0;       // number of questions on quiz
    int numCorrect = 0;         // number correct of entered values
    int correctAnswer;          
    int[] key = new int[numQuestions];  

ここで numQuestions は 0 として宣言されています。これを別の有効なものに変更します。

于 2013-03-06T02:54:16.367 に答える