有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

}'

==>;这不是一个很好的解决方案。首先,接受者需要对论点了解太多。 第二,三个类中的每一个都有一个嵌套的条件语句。如果是新的 可以向游戏中添加各种对象,三个类中的每一个都需要修改。 有人能和我分享一下如何让这段“不太理想”的代码工作,从而看到它“工作”吗。她继续展示一种更好的方式,但我不会打扰你。 谢谢


共 (3) 个答案

  1. # 2 楼答案

    使用一个enum来处理它(RPSObj),它有一个beats(RPSObj o)方法,每个枚举元素都有一个Set传入,存储为beatset。然后,beats(RPSObj o)方法可以执行return beatset.contains(o);。简单:)

    编辑:实际上可以使用EnumSet作为集合实现,这应该比其他集合实现更有效:)

  2. # 3 楼答案

    下面是我如何修复的。我第一次做了一个叫做GameObject的新界面,因为他们提到了它

     public interface GameObject
     {
     public boolean beats(GameObject g);
     }
    

    这种类型不存在,所以提到它就不太好用了

    以下是我对摇滚乐的新代码,以及对变化的评论:

     import java.util.*;
     import java.lang.*;
    
     public class Rock implements GameObject //Need to be an instance of GameObject somehow!
     {
     public static void main(String args[])
         {
    
         }
    
     public boolean beats(GameObject object) //This isn't static anymore
     {
     boolean result = false; //Need to declare and initialize result
     if (((Object)object).getClass().getName().equals("Rock")) //getClass should have ()
         { 
         result = false;
         }
     else if (object.getClass().getName().equals("Paper")) //getClass should have ()
         {
         result = false;
         }
     else if(object.getClass().getName().equals("Scissors")) //getClass should have ()
         {
         result = true;
         }
    return result;
     }
     }
    

    编辑:你似乎在问如何修复代码,而不是更好的方法。我相信这对你来说是件好事