2017-01-23 34 views
-1

У меня есть метод, который возвращает True или False, в зависимости от ввода, который является либо «y», либо «n». Однако я хочу, чтобы он возвращал ошибку, когда что-то еще вводилось в заданный вопрос. Я спрашиваю, как вернуть String, например, в Boolean Method. Вот то, что я до сих пор:Как вернуть ошибку в булевом методе?

public static boolean askYesNo(String question1) { 
    question = question1; 
    System.out.println(question); 
    answer = kbdScanner.next(); 
    if (answer.charAt(0) == 'y') { 
     return true; 
    } 
    else if (answer.charAt(0) == 'n') { 
     return false; 
    } 
    return ?????; 
} 

Благодаря

+2

Возможно, вы захотите прочитать об исключениях; или вы можете использовать 'Boolean' в качестве возвращаемого типа (чтобы вы могли вернуть« null », а затем проверить« null »в вызывающем коде); или вы можете просто запрограммировать цикл, пока не получите 'y' или' n'. –

+0

Вы можете использовать ['Необязательный '] (https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html). Он позволяет вам возвращать 'Optional.of (true)', 'Optional.of (false)' или 'Optional.empty()'. Это похоже на предложение Boolean от Andy, но более явное (и требует Java8). –

+0

вы можете бросить исключение RuntimeException, если вы не хотите, чтобы метод выбрал исключенное исключение –

ответ

0

возможное решение, чтобы проверить ответ перед вызовом метода. Так в абстрактном коде:

while (answer is not y or n) { 
    ask question again 
} 
call method 
+0

Да, это работает! Но я использовал (answer.charAt (0)! = 'Y' && answer.charAt (0)! = 'N') как условие для цикла while. Большое спасибо! – Sev

+0

Добро пожаловать. Я знаю, что не является точным ответом на заданный вами вопрос (возвращая строку в логическом методе), но я думаю, что это то, что вы хотите, чтобы ваша программа выполняла? – Sweenah

+0

Да, я хочу, чтобы это было в основном, нет, не нравится этот ответ, попробуйте еще раз. – Sev

0

Вобще
throw new IllegalArgumentException(question1);

1

Способ Java может всегда только один тип возвращаемого значения. В вашем случае это логическое значение, поэтому вы не можете вернуть строку.

Что вам нужно, это исключение. Исключения могут быть выброшены, например. если произойдет что-то неожиданное. Подробнее об этом можно узнать здесь: http://beginnersbook.com/2013/04/java-exception-handling/

В вашем случае я предлагаю использовать IllegalArgumentException, так как вы хотите обработать случай, когда ввод метода недействителен.

+0

Хорошо, я вижу. Его намного короче, чем создание всего цикла, но оно также прекращает этот метод? – Sev

+0

Да, бросание исключения завершает метод в этой точке. Вам придется обрабатывать исключение, которое вы вызываете методом. то есть с использованием блока try-catch. Объяснение и подробности см. Здесь [здесь] (http://beginnersbook.com/2013/04/try-catch-in-java/) – Sheep

Смежные вопросы