Variables 变量抽象

Variables 变量抽象,variables,abstraction,greenfoot,Variables,Abstraction,Greenfoot,所以我在上高中的Java在线课程,我的老师不帮我。。。 所以我们正在学习抽象,我已经用我的外星人类做了这项工作,他将通过切换两个图像来面对一个前进方向和另一个后退方向。。。然而,当他们在一个例子中展示代码时,它似乎过于复杂了,我想知道我是否遗漏了一些东西 我的代码 private String avatarRight = "Alien.png"; private String avatarLeft = "Alien1.png"; /** * Act - do whatever the Ali

所以我在上高中的Java在线课程,我的老师不帮我。。。 所以我们正在学习抽象,我已经用我的外星人类做了这项工作,他将通过切换两个图像来面对一个前进方向和另一个后退方向。。。然而,当他们在一个例子中展示代码时,它似乎过于复杂了,我想知道我是否遗漏了一些东西

我的代码

private String avatarRight = "Alien.png";
private String avatarLeft = "Alien1.png";
/**
  * Act - do whatever the Alien wants to do. This method is called   whenever
  * the 'Act' or 'Run' button gets pressed in the environment.
  */
public void act() 
 {
     movement(avatarRight, avatarLeft);
     gatherPart();
 }
包含运动方法的超类

/**
* Sets up the movement keys and facing for the Object
*/
public void movement(String avatarRight,String avatarLeft)
{
     if (atWorldEdge() == false)
      {
        if (Greenfoot.isKeyDown("w"))
         {
            setLocation(getX(), getY()-2);
         }
        if (Greenfoot.isKeyDown("d"))
         {
            setImage(avatarRight);
            setLocation(getX()+2, getY());
         }
        if (Greenfoot.isKeyDown("s"))
         {
            setLocation(getX(), getY()+2);
         }
        if (Greenfoot.isKeyDown("a"))
         {
            setImage(avatarLeft);
            setLocation(getX()-2, getY());
         }
      }
     else
      {
      }
}
他们的代码

{
    private GreenfootImage image1;
    private GreenfootImage image2;
    private boolean isKeyDown;
    private String key;
    private String sound;
    /**
    * Create a Duke and initialize his two images. Link Duke to a specific keyboard
    * key and sound.
    */
   public Duke(String keyName, String soundFile)
   {
        key = keyName;
        sound = soundFile
        image1 = new GreenfootImage("Duke.png")
        image3 = new GreenfootImage("duke2.png")
        setImage(image1);
    }

}
这里我只说avatarRight=这个图像

他们说key=keyname

钥匙

编辑: 所以,我最初设置它的方式是

private int rotation;
public Capsule(int rot)
{
    rotation = rot
    setRotation(rotation);
}
但就我所知,下面这一个非常好用。有什么理由我会使用上面的代码而不是下面的代码吗

public Capsule(int rot)
{
    setRotation(rot);
}

好吧,根据评论我倾向于说你不是在比较相同的东西

我刚才说的是avatarRight=这个图像,他们说的是key=keyname key =键

这似乎并不完全准确。你说呢

私有字符串avatarRight=Alien.png;和 私有字符串avatarLeft=Alien1.png

他们在构造函数中把png硬编码为Duke.png和duke2.png,顺便说一句,其中包含一个错误,因为据我所知,没有image3

因此,keyName似乎不像您所说的那样直接映射。也许您应该进一步研究代码,看看它们是如何使用键的,或者为这两个示例提供相同的代码,以便我们可以进一步了解差异

通过查看它,也许某个地方有一张地图,钥匙将用于访问特定的外星人或其他类型的游戏对象

以解决您的编辑问题

有什么理由我会做上面的代码而不是一个 下面


不可能通过代码判断原因是否有价值;从你所展示的东西看,它似乎不起作用。我可以告诉你,我之所以这么做,是因为我在别处需要这个值,而不是现在。这可能有很多原因。您必须查看所有可用的代码,看看他们是否曾在其他地方使用该变量而不传入该变量。然后您就找到了其中的原因或不足。

您正在将构造函数与移动代码进行比较。我不清楚哪一部分过于复杂。我会说你的移动代码并不理想,因为你可以很容易地将特定的移动绑定到一个特定的键,并避免所有的检查,而这些检查是他们代码中的注释似乎暗示他们正在计划的。好吧,这就是原因。那么您将如何改进代码呢?这就是本课教我们如何编写动作代码的方法。那就不用担心那部分了。你能澄清一下你认为他们更复杂的是什么吗。这是一个构造函数,所以如果你要比较它们,看起来你必须比较相同的东西,例如,构造函数,方法,变量等等。我看到的主要事情是它们有对图像的引用,而你没有。他们的会更好,因为每次设置图像时都必须获取文件;对不对?他们设置ImageImage,你设置ImageString。他们的代码使用中间变量,他们有参数keyName,然后创建一个名为key的新变量,然后设置key=keyName,但为什么不只设置keyName=key,其中key是你要使用的键,比如w。好吧,我明白你的意思,我试着把苹果和桔子进行比较。乍一看,代码似乎在做同样的事情,但事实并非如此。这就是为什么我感到困惑的原因。谢谢你的澄清。这是一个小问题,并不完全相关,所以我删除了它。我将把它添加到顶部…好的,谢谢你,这是非常混乱的,因为他们只有一小部分代码显示在.PDF格式的图片中,所以你不能看到它的全部。。。。我开始越来越讨厌这门课了。。。再次感谢您的帮助,在我学习Java的过程中,您给了我巨大的帮助!如果你在事后猜测你的决定是否与书本相反,不要这样做。他们的代码片段可能来自最终结果,因此他们知道您现在所做的更多,而您可能不需要它。只需要知道,当你需要做的时候,你只需要重构更改来反映新的需求,代码就可以正常工作。如果我现在能够更好地回答,请随时重新接受:@power5000@power5000,我想说的是,虽然这段话是一个暗示,在你面前。所以,虽然你现在可能不需要它,也不知道你为什么会需要它,但他们认为他们需要它,而且他们可能有很好的理由。