【问题标题】:How to return an error in a Boolean method?如何在布尔方法中返回错误?
【发布时间】:2017-06-08 13:29:38
【问题描述】:

我有一个方法返回 True 或 False,具体取决于输入是 'y' 还是 'n'。但是,当向所询问的问题输入任何其他内容时,我希望它返回错误。我在问如何在布尔方法中返回一个字符串。这是我目前所拥有的:

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

谢谢

【问题讨论】:

  • 您可能想了解异常;或者你可能想使用Boolean作为返回类型(这样你就可以返回null,然后在调用代码中检查null);或者你可能只是想循环直到你得到yn
  • 您可以使用Optional<Boolean>。它可以让您返回Optional.of(true)Optional.of(false)Optional.empty()。这类似于 Andy 的 Boolean 建议,但更明确(并且需要 Java8)。
  • 如果您不希望该方法抛出已检查的异常,则可以抛出 RuntimeException
  • 在不相关的注释上,您希望“Y”和“N”有效吗?还是只有“y”和“n”?
  • 嗯,好点,我没想到。我认为 id 可能坚持使用“y”和“n”。只是为了确认一下,如果我也想要 'Y' 和 'N' id,只需添加 (... || answer.charAt(0) == 'Y' ...) 否?

标签: java methods return boolean


【解决方案1】:

Java 中的方法总是只能有一个返回类型。在你的情况下是布尔值,所以你不能返回一个字符串。

您需要的是一个例外。可以抛出异常,例如如果发生意外情况。在此处阅读更多信息:http://beginnersbook.com/2013/04/java-exception-handling/

在您的情况下,我建议使用IllegalArgumentException,因为您要处理方法输入无效的情况。

【讨论】:

  • 好的,我明白了。它比整个 while 循环创建要短得多,但它也终止了该方法,不是吗?
  • 是的,抛出异常会终止该方法。不过,您将不得不处理调用该方法的异常。即使用 try-catch 块。解释及详情见here
【解决方案2】:

一种可能的解决方案是在调用方法之前验证答案。 所以在抽象代码中:

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

【讨论】:

  • 是的,它有效!但我使用 (answer.charAt(0) != 'y' && answer.charAt(0) != 'n') 作为 while 循环的条件。非常感谢!
  • 不客气。我知道这不是您所问问题的确切答案(以布尔方法返回字符串),但我想这就是您希望程序执行的操作?
  • 是的,我希望它基本上去,不,不喜欢这个答案,再试一次。
【解决方案3】:

只要做
throw new IllegalArgumentException(question1);

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2012-11-03
    相关资源
    最近更新 更多