我正在编写一个通过控制台进行用户交互的游戏。用户将输入一个命令,后跟一个空格,然后是该命令的参数。例子: move-piece 5-right命令是“move-piece”,参数是“5-right”(向右 5 个点)。我有一种方法可以检查命令和参数是否以正确的格式输入。然后,该方法使用移动棋子的参数调用 move 方法。例外情况的一个示例可能是游戏已经结束,在这种情况下,不允许用户移动任何棋子。另一个例外情况是将棋子移出棋盘。我总是读到关于使用控制流异常是如何不好的,但我真的不明白这意味着什么。if (gameOver){
throw new CustomGameException("you cannot move any pieces, because the game is over.");
}以上是否考虑控制流异常?当然,这并不是游戏规则被破坏的唯一情况。我有更多的 if 语句来检查边缘情况,但我不确定这是否是一件好事。如果上述被认为是不好的做法,我还应该如何处理这种情况?我希望能够为每个边缘案例打印出一条独特的消息,以告知用户他/她的错误。我应该注意,这是一个学校项目,我们不允许在我们的主代码中有任何 System.out.print。输出在 main 方法中打印给用户。为清楚起见进行编辑:我们不允许在代码中使用打印方法。输出在 main 方法中完成。我们老师给我们的建议解决方案也是使用异常来处理这种情况。解决方案中此类用法的一个示例是当用户尝试连续两次掷骰子时(根据游戏规则,这是不允许的)。对于这种情况,我的老师在 roll 方法中抛出了异常。老师还说我们不应该使用异常来控制流程,这就是为什么我有点困惑。
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
不要太从字面上理解关于不对控制流使用异常的说法。在许多情况下,异常工作得很好。
一个是很难(或超出责任范围)知道如何处理错误的代码来检测错误是否会发生。您的情况可能就是这样的一个例子:您想在 main 方法中处理所有用户交互,但是代码中不同深度的各种事情都可能使命令无效。所以抛出一个异常并完成它。不要担心每次用户输入一些文本时最多会发生一次的事情的性能。
使用异常的另一个原因是在检查操作是否成功时存在自然竞争条件。例如,您想创建一个文件,但常见的情况是同名文件可能已经存在,或者您的磁盘空间不足或类似情况。在这种情况下,检查操作是否会成功是没有用的,因为稍后您执行操作时它可能仍会失败。只需尝试这样做并捕获正确的异常。
关于“永远不要使用 X”形式的建议在编程中很常见,而且几乎不值得对它呈现的女巫的热情。
添加回答
举报
0/150
提交
取消