Java 驾驶考试多项选择数组,同时循环提示学生回答方法

Java 驾驶考试多项选择数组,同时循环提示学生回答方法,java,arrays,loops,while-loop,Java,Arrays,Loops,While Loop,这里需要帮助。我正在努力使这种方法奏效。每当我运行该方法时,即使我输入了A、B、C或D,它也会抛出IllegalArgumentException。我使用的是inputReader类。这是我的DriverExam类的代码。请告诉我哪里出了问题。我想要它,所以唯一有效的答案是a、b、c或d。我必须使用while循环,而我所尝试的一切都无法帮助我匹配驱动变速器 public class DriverExam { // instance variables public static

这里需要帮助。我正在努力使这种方法奏效。每当我运行该方法时,即使我输入了A、B、C或D,它也会抛出
IllegalArgumentException
。我使用的是
inputReader
类。这是我的
DriverExam
类的代码。请告诉我哪里出了问题。我想要它,所以唯一有效的答案是a、b、c或d。我必须使用
while
循环,而我所尝试的一切都无法帮助我匹配
驱动变速器

public class DriverExam
{
    // instance variables
    public static final String[] ANSWERS = {"B","D","A","A","C","A","B","A","C","D","B","C","D","A","D","C","C","B","D","A"};

    private String [] driverAnswers;
    private InputReader inputReader;

    public DriverExam(){
        driverAnswers = new String[20];
        inputReader = new InputReader();
    }

    public void promptStudentAnswers(){
        int index = 0;

        while(index < driverAnswers.length){
            System.out.println("enter answer");
            String driverAnswers = inputReader.readString();
            if(driverAnswers != ANSWERS[index]){
                throw new IllegalArgumentException(" answers can only be A,B,C or D");
            } else{ 
                index++;
            }
        }
    }
}
公共类driverxam
{
//实例变量
公共静态最终字符串[]答案={“B”、“D”、“A”、“A”、“C”、“A”、“B”、“A”、“C”、“D”、“B”、“C”、“D”、“D”、“C”、“C”、“B”、“D”、“A”};
专用字符串[]驱动器转换器;
私人输入者输入者;
公共驱动器{
DriveTranswers=新字符串[20];
inputReader=新的inputReader();
}
公共无效提示学生回答(){
int指数=0;
while(索引<驱动变速器长度){
System.out.println(“输入答案”);
String DriveTranswers=inputReader.readString();
if(driverAnswers!=答案[索引]){
抛出新的IllegalArgumentException(“答案只能是A、B、C或D”);
}否则{
索引++;
}
}
}
}

首先,您要测试答案是A、B、C还是D中的一个(而不是答案是否与正确答案数组中的某个内容匹配)。此外,您的
driverAnswers
被屏蔽,因为您创建了另一个具有该名称的局部变量。基本上,我想你想要的是

public void promptStudentAnswers() {
    int index = 0;

    while (index < driverAnswers.length) {
        System.out.println("enter answer");
        String answer = inputReader.readString().trim().toUpperCase();
        if (answer.length() == 1 && "ABCD".indexOf(answer) != -1) {
            driverAnswers[index] = answer;
            index++;
        } else {
            System.out.println("Answers can only be A,B,C or D");
        }
    }
}
公共无效提示学生回答(){
int指数=0;
while(索引<驱动变速器长度){
System.out.println(“输入答案”);
字符串应答=inputReader.readString().trim().toUpperCase();
if(answer.length()==1&&“ABCD”.indexOf(answer)!=-1){
司机服务[索引]=答案;
索引++;
}否则{
System.out.println(“答案只能是A、B、C或D”);
}
}
}

为什么要抛出异常?我理解==是什么,以及.equals@ScaryWombat,这只是标准的一部分。我必须制定一些DriverExam方法。这是第一个。我非常坚持让这个方法正常运行。我取出了另一个新的局部变量,我正在修补代码,希望找到正确的答案。如果我输入类似于If{driverAnswers=“ABCD”){driverAnswers[index]=answer;index++;}或者{S.O.P(“”),它会给我一个错误:不可比较的类型java.lang.string[]还有java.lang.Stringhey Elloit有什么方法可以简化这个方法吗?我是一名编程专业的一年级学生,我们刚刚学习了java中的数组。我试图用我所学的知识来理解它。有什么方法可以简化这个方法吗?(answer.length()==1&“ABCD”.indexOf(answer)!=-1)为什么answer.length()==1?确保它是一个字符。一个字符出现在
ABCD
中。这和方法一样简单(而且是
字符串
而不是数组)。你的帮助太棒了。我还没有了解.indexOf。你能进一步解释answer.length()吗==1?和!=-1?为什么是1和-1?谢谢
answer.length()==1
测试
answer
是一个字符(获取
字符串的长度)。返回指定子字符串第一次出现的索引,如果没有出现,则返回
-1
。这些是
字符串
的标准方法。我们还没有讨论过这一点,我无法使用尚未教过的内容。不幸的是:(.我只是在挖苦你的大脑,希望我不要太烦人!我从我的教授那里得到了一个提示,但我找不到做这件事的方法。向用户询问答案,检查答案是b c还是d,如果答案有效,将其放入数组并递增计数器。否则会加入非法参数。我尝试使用DriveTranswers==“ABCD”但是我得到了一个不可比较的类型错误,这很糟糕,因为它们都是字符串,但都是一个字符串[],而另一个只是字符串。谢谢大家Elliot