2015-04-21 2 views
-2
//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"); 
      } 

ошибка:Не удается найти символ в строке 10?

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

Какая линия 10 или 11? –

+4

Можете ли вы скопировать и вставить ошибку, которую вы попадаете в вопрос? – Paddy

+1

какой символ? и где именно? –

ответ

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

В Java, переменная сфера работает на уровне блоков. Любой блок, который вы видите окруженным в { ... } брекетами, имеет свой собственный объем.

Переменная область означает, что переменные, объявленные в более глубоких (или «родственных») областях, не отображаются в других областях.

У вас есть что-то вроде

if (condition) { 
    String x = ""; 
} 

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

Проблема с этим кодом является то, что x (в вашем случае, questionOne) только объявляется, если мы заходим внутрь if блока. Представьте, если условие (readyOne.equalsIgnoreCase("yes") в вашем случае) не выполнено, то questionOne не будет объявлен.

Что нужно, это объявить questionOne вне блока if и установить его в другое значение, если условие выполнено.

0

Переменная questionOne объявляется внутри блока - блок, который приходит после состояния if.

Поэтому он доступен только внутри этого блока. Когда вы находитесь за пределами этого блока (следующий if находится за пределами), то он больше не существует.

Вам необходимо переместить второй if внутри блока, где объявлен questionOne. Это также нелогично для него быть вне его, так как вне этого if вы не знаете, был ли ответ yes или no или что.

1

questionOne является локальным для блока, в котором он объявлен. Вам необходимо объявить его вне этого блока.

String questionOne; 
if (readyOne.equalsIgnoreCase("yes")) { 
    questionOne = console.readLine("1 + 1 = "); 
    console.printf(questionOne); 
} else { 
    questionOne = ... // Needs to be assigned here too. 
} 
Смежные вопросы