【问题标题】:Java cannot find symbol for loops, logic problems?Java找不到循环符号,逻辑问题?
【发布时间】:2012-02-02 00:27:35
【问题描述】:

好的,我在本节中的程序从 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;
        }
    }
 }

【问题讨论】:

  • 比较origAns.substring[j] == key[j]只比较引用...你需要使用key[j].equals(origAns.substring[j])
  • 它应该是origAns.substring(j) ... () 而不是[]

标签: java arrays variables loops


【解决方案1】:

听起来您正在尝试调用substring 方法 - 但您正在尝试访问它,就好像它是一个字段一样。所以第一个变化是:

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

除了将比较字符串 references 而不是 contents,所以你可能想要:

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

【讨论】:

  • 非常感谢!非常彻底,我很感激!
【解决方案2】:

在 Java 中调用方法时,使用括号 () 而不是括号 []

既然substring是一个方法,你应该这样称呼它

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

还有一些注意事项,您应该使用equals 方法进行比较(尤其是那些涉及Strings 的比较。)

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

此外,您应该使用charAt 在字符串中的某个位置提取单个字符。 substring(j) 将返回从位置 j 开始的字符串。

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

【讨论】:

    【解决方案3】:

    你的解释很长,我从头到尾都没有看。但我可以在您的代码中看到至少一个问题:

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

    您正在使用 == 而不是使用方法 equals() 比较字符串:

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

    【讨论】:

      【解决方案4】:

      子字符串是字符串对象的一个​​函数,而不是一个成员。查看本页顶部的示例:

      http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

      注意使用括号而不是括号。

      【讨论】:

        【解决方案5】:

        如果您使用的是字符串,请使用 charAt 函数

        String studentAnswer = "TTFFTFTFTF";
        for (int i = 0; i < studentAnswer.length(); i++)
        {
           char origAns = studentAnswer.charAt(i);
                }
        

        如果你使用的是字符数组,那么

        char studentAnswer[] = "TTFFTFTFTF".toCharArray();
                for (int i = 0; i < studentAnswer.length; i++){
                    char origAns = studentAnswer[i];
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-15
          • 2012-02-24
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          • 2014-04-26
          • 1970-01-01
          • 2015-07-13
          相关资源
          最近更新 更多