2010-10-15 187 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