我有一个关于棋盘游戏的任务,当我们获得正在进行的游戏状态时,通过方法建议最佳移动。我必须用Java做。
任务中有一条奇怪的指令:如果我们得到的状态不能在正常游戏中出现,那么"这种方法的行为是未定义的#34;。 (你可以想象这种状态,就像国际象棋一样,你会在相邻的战场上找到一个有两个国王的棋盘,这在真正的国际象棋游戏中是不会发生的。)
问题是:这个指令意味着什么?是否还有人遇到过同样的问题?
首先,我认为在这种状态下,我应该抛出一个IllegalStateException
。但是根据另一条指令行,我必须抛出IllegalStateException
,当我得到一个状态代表其中一个玩家已赢得游戏的状态,或者它是平局时。
我已经搜索了未定义行为的定义,但我不知道如何在这种情况下使用它。总之,我可以在Java中创建这种可以与这种情况相关联的行为吗?
答案 0 :(得分:4)
我认为当问题表明“这种行为未定义”时,它只是说他们不会测试那种情况,因为你无法合理地期望做任何事情。它实际上并不是你完成的任务 - 它只是告诉你不要担心这些情况。
答案 1 :(得分:1)
为什么不写一个“ImpossibleStateException”并抛出这个,如果上述情况属实? Java的设计中可以编写自己的异常类,所以为什么不写一个并在发生未定义状态时抛出它。
我不确定这个状态是如何产生的,我可以想象,如果你谈论一种棋盘游戏,也许有人会用ram或vm来摆弄它并试图欺骗/破解游戏。
另外,如果有人会对程序的每个可能状态进行深入测试,比如游戏允许的每个可能值的变量,那么大约98%的情况根本就没有意义。
答案 2 :(得分:0)
来自Oracle doc IllegalStateException:
表示在非法或不适当的时间调用了某个方法。换句话说,Java环境或Java应用程序未处于所请求操作的适当状态。
所以我觉得在你的情况下这不是一个好的解决方案。