在第10行找不到符号?

时间:2015-04-21 20:57:18

标签: java symbols

 //Question
            String readyOne = console.readLine("Are you ready for your first question?  ");
            console.printf(readyOne);
            if (readyOne.equalsIgnoreCase("yes")) {
            String questionOne = console.readLine("1 + 1 =  ");
            console.printf(questionOne); }

          //Answer
          if (questionOne.equals("2") || 
              questionOne.equalsIgnoreCase("two")) {
              console.printf("Well done");
          }

错误:

symbol:   variable questionOne
location: class oldjack
oldjack.java:36: error: cannot find symbol 
          questionOne.equalsIgnoreCase("two")) {
          ^
symbol:   variable questionOne
location: class oldjack
2 errors

4 个答案:

答案 0 :(得分:7)

这是典型代码形成的典型例子:

String readyOne = console.readLine("Are you ready for your first question?  ");
console.printf(readyOne);
if (readyOne.equalsIgnoreCase("yes")) {
    String questionOne = console.readLine("1 + 1 =  ");
    console.printf(questionOne);
} // lifeness of questionOne ends here

// Answer
if (questionOne.equals("2") || questionOne.equalsIgnoreCase("two")) {
    console.printf("Well done");
}

变量questionOne仅在第一个if - 块

中存活且可见

要修复代码,您可能希望将第二个if移到第一个if

String readyOne = console.readLine("Are you ready for your first question?  ");
console.printf(readyOne);
if (readyOne.equalsIgnoreCase("yes")) {
    String questionOne = console.readLine("1 + 1 =  ");
    console.printf(questionOne);
    // Answer
    if (questionOne.equals("2") || questionOne.equalsIgnoreCase("two")) {
        console.printf("Well done");
    }
}

答案 1 :(得分:1)

在Java中,变量范围在块级别上工作。您在{ ... }大括号中看到的任何块都有自己的范围。

变量范围意味着在更深(或#34;兄弟")范围内声明的变量在其他范围内不可见。

你有类似

的东西
if (condition) {
    String x = "";
}

if (x.equals("2")) {
  ...
}

此代码的问题是x(在您的情况下,questionOne)仅在我们进入if块时才会被声明。想象一下,如果不满足条件(在您的情况下为readyOne.equalsIgnoreCase("yes")),则不会声明questionOne

您需要的是在questionOne块之外声明if,并在满足条件时将其设置为不同的值。

答案 2 :(得分:1)

questionOne是声明它的块的本地。你需要在该块之外声明它。

String questionOne;
if (readyOne.equalsIgnoreCase("yes")) {
    questionOne = console.readLine("1 + 1 =  ");
    console.printf(questionOne);
} else {
    questionOne = ...   // Needs to be assigned here too.
}

答案 3 :(得分:0)

变量questionOne在块中声明为 - 在if条件之后的块。

因此它仅在该块内可用。一旦你在那个街区之外(下一个if在外面),那么它就不再存在了。

您需要在声明if的块内移动第二个questionOne。它不在外面也是不合逻辑的,因为在if以外你不知道答案是yes还是no还是什么。