Java:输入10个多项选择A、B、C、D并输出数字正确、错误和等级

标签 java arrays if-statement for-loop while-loop

您好,我需要一些帮助来完成一项任务,我很确定我即将完成,但需要清理一些事情。我的任务是获取一名学生的姓名,输入他们的 10 个答案,并将它们与答案键的答案相匹配。但有一个问题,无论输入的答案是什么,都必须是 A、B、C 或 D,如果是其他内容,我必须要求再次输入答案。因此,我将输入更改为 char 并创建了一个 while 语句,以查看输入的内容是否不等于 A、B、C 或 D,以提示输入 A、B、C 或 D,并再次提示输入答案。但即使我输入了 A、B、C 或 D,它仍然询问我 A、B、C 或 D。请帮忙,谢谢

import javax.swing.JOptionPane;

public class assignment3 {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
        int i = 0;
        String answer;
        int grade = 0;
        int correct =0;
        int incorrect =0;
        char input;
        char inputarray[]=new char [10];
        char[] answerkey = 
            { 'B','D', 'C', 'D', 'C', 'A', 'C', 'B', 'B', 'D' };
        String Name = JOptionPane.showInputDialog("Enter Name");
        for (i = 0; i< answerkey.length; i++) { 
        answer = JOptionPane.showInputDialog("Enter answer for question " + (1+i)); 
        input = answer.charAt(0);
        while (input != 'A' || input != 'B' || input != 'C' || input != 'D')  { 
           JOptionPane.showMessageDialog(null, "Please enter A,B,C, or D");
           answer = JOptionPane.showInputDialog("Enter answer for question "(1+i));
           input = answer.charAt(0);
        }
        inputarray[i] = input;
        i++;
        while (i < answerkey.length)
        {
            if (inputarray[i] == answerkey[i])
                correct++;
            else
                incorrect++;
        }
    }
    grade = ((correct++) / (answerkey.length)) * 100;
    JOptionPane.showMessageDialog(null, "Name: " + Name + "Answers Correct: "+ correct + "Answers Incorrect: "+ incorrect + "Grade: " + grade+ "%");
}
}

最佳答案

您在这行中的逻辑不正确。

while (input != 'A' || input != 'B' || input != 'C' || input != 'D') 

它总是正确的,它不是“A”,不是“B”,不是“C”,也不是“D”。试试这个:

while (input != 'A' && input != 'B' && input != 'C' && input != 'D') 

顺便说一句,在 Java 中,整数除法会截断你的答案(int 除以 int 必须得到 int),如这一行:

grade = ((correct++) / (answerkey.length)) * 100;

grade 声明为 double 并将计算中的变量之一转换为 double:

grade = ( (double) (correct++) / (answerkey.length)) * 100;

关于Java:输入10个多项选择A、B、C、D并输出数字正确、错误和等级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549309/

相关文章:

java - "IllegalFormatConversionException: d != java.lang.String"用0填充数字时?

java - JFrame 上的计数器

javascript - 如何从这个嵌套数组中获取值

MySQL 查询错误 IF、END IF

java - java判断文件是否存在

java - OpenStack JClouds 如何使用现有 token 构建 ContextBuilder 或其他东西

java - 以最有效的方式分割字符串

c++ - 字符比较错误

c# - 使用 Newtonsoft 解析 JSON 数组

c - 为二维数组分配空间时程序卡住