2015-06-16 2 views
-1

У меня проблемы с булевыми методами.Java boolean method с оператором if - «должен возвращать результат типа boolean»

private boolean askYesNoQuestion(String prompt){ 
prompt = prompt.toLowerCase(); 
if(prompt.equals("yes")) return true; 
if(prompt.equals("no")) return false; 
else prompt = readLine("Please answer yes or no."); 
} 

Eclipse, говорит: «метод должен возвращать результат типа булевой».

Такая же проблема в следующем коде:

private boolean isPerfectSquare(int n){ 
for(int i = 0; i <= n; i++){ 
if(i*i == n) { 
return true; 
} 
else return false; 
} 

Я думаю, что уже включены return в отчетности, за исключением того, что они после if заявления.

+2

Отформатируйте код немного. – DJClayworth

ответ

5

Хотя вы включаете пару операторов возврата, все они происходят внутри цикла. Java проверяет все пути и обнаруживает, что цикл может завершиться без ввода самой первой итерации, например, потому что n отрицательный. В этом случае инструкция if не будет выполнена, поэтому не будет return.

Вы можете включить безусловный возврат после цикла, чтобы исправить эту проблему. Тем не менее, похоже, что ваша логика сломана: если вы вообще войдете в цикл, вы сразу вернетесь, не завершив первую итерацию. Похоже, что вы имели в виду, чтобы написать это:

private boolean isPerfectSquare(int n){ 
    for(int i = 0; i <= n; i++){ 
     if(i*i == n) { 
      return true; 
     } 
    } 
    return false; 
} 
0

Вам нужно что-то вернуть (истина или ложь) в рамках самого метода, как ваши возвращения заявления в настоящее время не являются «видимыми» вне из если заявления.

Вы можете фактически опустить инструкцию else во втором методе. Для первого, просто верните false за пределами последнего.

0

Каждый путь выполнения должен возвращать логическое значение. В вашем первом примере else prompt = readLine("Please answer yes or no."); не возвращает boolean

0

Вам нужно вернуть логическое значение после цикла for. Оператор 'if' не выполняется, если, скажем, n = -1.

0

Прежде всего, попробуйте отформатировать код, чтобы было легче следовать логике. В первом коде причина, по которой вы получаете ошибку, состоит в том, что ее метод не может возвращать ничего. Если подсказка не да, а ее нет, она перейдет к инструкции else. Программа будет запускать readLine и выйти из метода, не возвращая ничего. То, что вы хотите сделать, это запустить readline в цикле while, который не завершается до тех пор, пока не будут введены ни да, ни нет.

Для второй проблемы у вас есть логическая проблема. Если n не равно 0, ваш метод всегда будет возвращать false. Вы должны переместить положительную линию возврата за пределы цикла for.

0

В своем первом блоке в заявлении else вы ничего не вернули. Это изменение сделает все хорошо.

private boolean askYesNoQuestion(String prompt){ 
    prompt = prompt.toLowerCase(); 
    if(prompt.equals("yes")) 
      return true; 
    if(prompt.equals("no")) 
      return false; 
    else { 
      prompt = readLine("Please answer yes or no."); 
      return [true or false] 
     } 
} 

В вашем втором блоке, если n - отрицательное значение, поэтому для оператора не будет работать, поэтому там нет оператора возврата. И так будет хорошо.

private boolean isPerfectSquare(int n){ 
    for(int i = 0; i <= n; i++){ 
     if(i*i == n) { 
      return true; 
     } 
     else 
      return false; 
    } 
    return [true or false] 
} 
0

Если метод объявлен как возвращаемый, все пути кода должны возвращать значение. У вас есть два пути кода, которые возвращают значение, а другое - нет.Форматирование кода, становится все яснее, в чем проблема:

private boolean askYesNoQuestion(String prompt) { 
    prompt = prompt.toLowerCase(); 
    if (prompt.equals("yes")) { 
     return true; 
    } 

    if (prompt.equals("no")) { 
     return false; 
    } else { 
     prompt = readLine("Please answer yes or no."); 
    } 

    // You must return a boolean value here 
} 

Вашего окончательное else заявление является излишним - не далее код не будет выполняться, если prompt делает равным no. Вы можете устранить его и добавить еще return false в соответствующем месте:

private boolean askYesNoQuestion(String prompt) { 
    prompt = prompt.toLowerCase(); 
    if (prompt.equals("yes")) { 
     return true; 
    } 

    if (prompt.equals("no")) { 
     return false; 
    } 

    writeLine("Please answer yes or no."); 
    return false; 
} 

Это может быть значительно упрощена. Форматирование кода может быть очень важным в качестве первого шага в устранении ошибок. Повторите свой второй пример и посмотрите, можете ли вы выяснить, что требуется, а что нет.

0

Спасибо всем. Кажется, что оператор «return» должен быть вне любого цикла (например, для или в то время). Следующий код дал хорошие результаты.

public class Test1 extends ConsoleProgram { 

public void run() { 
    String prompt = readLine("Would you like instructions?"); 
    prompt = prompt.toLowerCase(); 
    while(!prompt.equals("yes") && !prompt.equals("no")){ 
     prompt = readLine("Please answer yes or no."); 
     prompt = prompt.toLowerCase(); 
    } 
    if(askYesNoQuestion(prompt)) println("Here are the instructions."); 
    else println("Please start the test."); 
    println(askYesNoQuestion(prompt)); 

} 
private boolean askYesNoQuestion(String prompt){   
    if(prompt.equals("yes")) { 
     return true; 
    } 
    else return false;    
} 

}

Вторая программа также работает, если оператор "возвращение" находится за пределами цикла:

private boolean isPerfectSquare(int n){ 
     int i = 0; 
     while (i*i != n) { 
       if (i*i > n) break; 
       i ++; 
     } 
     return (i*i == n); 
    } 
Смежные вопросы