0

这是我正在为课堂准备的一个程序。在编写了大部分程序之后,我现在正在尝试运行它,看来我有一个逻辑错误。由于某种原因,计算机将一直执行到第一个 for 循环,然后忽略我尝试提示用户将值输入数组的 scan.nextInt 方法。

编辑:新问题:现在,当我运行程序时,未正确执行的循环是第二个 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 大小初始化数组(请注意,您正在numQuestions使用 0 进行初始化)。numQuestions只需在获取用户输入的值后移动数组初始化:

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

如果要 double使用int/longdouble变量赋值,则应将int/long转换为double或乘以1.0(字面量),否则浮点结果将是int/ long。修改这部分代码:

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);

从上面的链接:

  • %%将打印%符号
  • %.2f将使用 2 个固定小数打印浮点数
  • \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];  

对于您问题的第二部分,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 回答