好的,我在本节中的程序从studentAnswer字符串数组中获取一行数据,其值将类似于TTFFTFTFTF。我应该接受它,并将其与键数组进行比较,键数组可能看起来像TFFFTFTFTF。一个学生参加测验,我的程序计算出正确的分数。

我的意图是使用单独的点数组来查找学生的数字成绩。 studentAnswer的索引指的是特定学生。所以studentAnswer[i]TTFFTFTFTF。我使用子字符串将每个T / F与key[]中的正确答案进行比较,该答案在每个索引中只有一个T / F。然后,如果他们的答案正确,则在points[]中的相关索引上加1,稍后再查找points[]的总和以找出十分之几。

我的问题是,用来定义学生原始答案字符串的字符串origAns遇到Java错误,找不到符号。我尝试将origAns的实例化放置在每个不同的for循环中,但无法使程序正常工作。 Int i的目的是跟随每个特定的学生-我有四个平行的数组,它们将记录该学生的ID号,数字等级,字母等级和原始答案。因此,i的目的是通过每个学生。然后应使用j遍历每个原始学生答案字符串并将其与正确答案进行比较...
从逻辑上讲,这对我来说应该放在哪里,但java不同意。请帮助我了解此错误!

for (int i = 0; i < studentAnswer.length; i++){
    String origAns = studentAnswer[i];
    for (int j = 0; j < key.length; j++){
        if (origAns.substring[j] == key[j]){
            //substring of index checked against same index of key
            points[j] = 1;
        }
        if (origAns.substring[j] != key[j]){
            points[j] = 0;
        }
    }
 }

最佳答案

听起来您正在尝试调用substring方法-但是您试图像访问一个字段一样对其进行访问。因此,第一个更改是:

if (origAns.substring(j) == key[j])


否则将比较字符串引用而不是内容,因此您可能需要:

if (origAns.substring(j).equals(key[j]))


实际上,我怀疑您想让charAt获得单个字符-substring将在指定索引之后返回包含所有内容的字符串:

if (origAns.charAt(j) == key[j])


...其中key在此处为char[]

您也可以通过使用else子句来避免进行“相反”比较。

为了可读性,您还应该更仔细地缩进代码。例如:

for (int i = 0; i < studentAnswer.length; i++) {
    String origAns = studentAnswer[i];
    for (int j = 0; j < key.length; j++) {
        if (origAns.charAt(j) == key[j]) {
           points[j] = 1;
        } else {
           points[j] = 0;
        }
    }
}


现在,您可以将其更改为使用条件表达式而不是if / else:

for (int i = 0; i < studentAnswer.length; i++) {
    String origAns = studentAnswer[i];
    for (int j = 0; j < key.length; j++) {
        points[j] = origAns.charAt(j) == key[j] ? 1 : 0;
    }
}

10-01 18:18