oop需要帮助推断Java代码
如果有人熟悉Rebecca Wirfs Brock,可以在她的书《对象设计:角色、责任和协作》中找到一段Java代码
以下是报价>对特定问题应用双重分派 为了实现“石头、布、剪刀”游戏,我们需要编写代码来确定 一个物体“击败”另一个物体。基于这三种类型,游戏有九种可能的结果 物体。交互的数量是各种对象的叉积。Case或switch语句通常由正在操作的数据类型控制。这个 面向对象语言等价于将其操作建立在其他对象的类上。在爪哇, 看起来像这样 下面是第16页的Java代码片段:
import java.util.*;
import java.lang.*;
public class Rock
{
public static void main(String args[])
{
}
public static boolean beats(GameObject object)
{
if (object.getClass.getName().equals("Rock"))
{
result = false;
}
else if (object.getClass.getName().equals("Paper"))
{
result = false;
}
else if(object.getClass.getName().equals("Scissors"))
{
result = true;
}
return result;
}
}'
==>;这不是一个很好的解决方案。首先,接受者需要对论点了解太多。 第二,三个类中的每一个都有一个嵌套的条件语句。如果是新的 可以向游戏中添加各种对象,三个类中的每一个都需要修改。 有人能和我分享一下如何让这段“不太理想”的代码工作,从而看到它“工作”吗。她继续展示一种更好的方式,但我不会打扰你。 谢谢
# 1 楼答案
你可能想看看这个帖子:
Using inheritance and polymorphism to solve a common game problem
它似乎围绕着同一个主题
# 2 楼答案
使用一个enum来处理它(
RPSObj
),它有一个beats(RPSObj o)
方法,每个枚举元素都有一个Set
传入,存储为beatset
。然后,beats(RPSObj o)
方法可以执行return beatset.contains(o);
。简单:)编辑:实际上可以使用EnumSet作为集合实现,这应该比其他集合实现更有效:)
# 3 楼答案
下面是我如何修复的。我第一次做了一个叫做GameObject的新界面,因为他们提到了它
这种类型不存在,所以提到它就不太好用了
以下是我对摇滚乐的新代码,以及对变化的评论:
编辑:你似乎在问如何修复代码,而不是更好的方法。我相信这对你来说是件好事