2010-10-15 188 views
0

好了,所以说我有一个类的Java初始化对象

class Ghost { 
    private int x, y, direction; 
    private Color color; 

现在说我不明确定义构造函数,所以它只是使用默认的一个。如果我要创建一个新的Ghost对象,那么方向会有什么价值? 0对吗?但我不知道为什么我一直在为方向获得1的值。任何你认为可能会出错的蝙蝠?

+1

不,它绝对是零,除非你有某个非常“有趣”的初始化器。您应该尝试删除'direction'并查看生成的编译器错误。 – 2010-10-15 03:24:32

+0

你确定你正在运行正确的类(从你有的源编译)吗? – Thilo 2010-10-15 03:41:56

+0

请显示所有内容,即使您的'direction'访问器正常,您也可能在其他地方做一些细微的错误操作。 – birryree 2010-10-15 03:44:45

回答

1

你能告诉我们更多的代码吗?想起其他事情正在发生。

int变量将默认初始化为0在Java中,如果我用你的片段,并实例化一个Ghost,其所有int成员均为0

从您的意见

所以,我觉得可能是有问题您的代码,如使用Ghost.setXGhost.setY时意外设置direction

在我极其简单的类实现中,此测试代码完全按照预期工作。

编辑,因为代码被张贴

好了,所以我得根据你的代码的类。我没有看到其他功能有什么问题,因为很少有班级实际上改变了direction。我删除了这些额外的功能,因为他们没有修改方向,只有一件事会将其设置为0.

您应该尝试一个非常简化的测试用例来查看您的代码是否正常工作。试试这个:

import junit.framework.Assert; 

class Ghost 
{ 
    private int x, y, direction; 

    public int getX() { return x; } 
    public void setX(int x) { this.x = x; } 

    public int getY() { return y; } 
    public void setY(int y) { this.y = y; } 

    public int getDirection() { return direction; } 
    public void setDirection(int direction) { this.direction = direction; } 

    public static void main (String [] args) 
    { 
     Ghost g = new Ghost(); 
     g.setX(10); 
     g.setY(20); 

     Assert.assertEquals(g.getDirection(), 0); 

     System.out.println(g.getX() + " " + g.getY() + " " + g.getDirection()); 
    } 
} 

一切仍然在这里,所以请按原样尝试。这纯粹是你的代码,如果它工作(应该),那么还有其他代码,比如你的类的用户正在做某事。

独立,您的代码应该工作得很好。

使用调试器

你熟悉调试器?如果您使用Eclipse或NetBeans,那么您应该使用集成到其环境中的调试器友好。这应该可以帮助你追踪direction的变化值。

使用调试器超出了本答案的范围;这是你真的需要阅读和尝试自己。

下面是一个用于调试的链接与Eclipse:

+0

那么没有其他的代码真的,但我的老师使用这个测试:'ghost g1 = new Ghost(); \t \t g1.setX(10); \t \t g1.setY(20); \t \t assertEquals(g1.getDirection(),0);' – Snowman 2010-10-15 03:27:26

+0

所以它期待一个0,但我得到一个assertequalsfailed因为它有一个1。我的意思是我没有其他的代码篡改方向,所以我不知道它会是什么。 – Snowman 2010-10-15 03:28:10

+0

请显示所有这些getters和setters,那里可能有一个错误。 – Thilo 2010-10-15 03:34:17

1

还有你是不是向我们展示的东西。你的getDirection()方法是否简单地返回方向,还是它做更奇特的事情?有没有一种setter方法可以做一些奇怪的事情?你没有向我们展示过的班级其他部分是否以某种方式修改了方向?

在Java中,int类型的实例变量被初始化为0,所以你要么不向我们展示某些东西,要么你正在使用一些非标准的实现(几乎肯定不是后者)。

+0

请参阅编辑getter和setter请.. – Snowman 2010-10-15 03:41:10

+1

您发布的代码应该工作。你是否从其他类或其他类调用setDirection()? – 2010-10-15 03:48:19

+1

在不相干的笔记上,您可能想重新考虑您的等号方法。等号方法的要点是检查“this”是否等于“other”。你没有在方法中引用“其他”应该是一个红旗... – 2010-10-15 03:51:27