好了,所以說我有一個類的Java初始化對象
class Ghost {
private int x, y, direction;
private Color color;
現在說我不明確定義構造函數,所以它只是使用默認的一個。如果我要創建一個新的Ghost對象,那麼方向會有什麼價值? 0對嗎?但我不知道爲什麼我一直在爲方向獲得1的值。任何你認爲可能會出錯的蝙蝠?
好了,所以說我有一個類的Java初始化對象
class Ghost {
private int x, y, direction;
private Color color;
現在說我不明確定義構造函數,所以它只是使用默認的一個。如果我要創建一個新的Ghost對象,那麼方向會有什麼價值? 0對嗎?但我不知道爲什麼我一直在爲方向獲得1的值。任何你認爲可能會出錯的蝙蝠?
你能告訴我們更多的代碼嗎?想起其他事情正在發生。
int
變量將默認初始化爲0在Java中,如果我用你的片段,並實例化一個Ghost
,其所有int
成員均爲0
所以,我覺得可能是有問題您的代碼,如使用Ghost.setX
或Ghost.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:
那麼沒有其他的代碼真的,但我的老師使用這個測試:'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,但我得到一個assertequalsfailed因爲它有一個1。我的意思是我沒有其他的代碼篡改方向,所以我不知道它會是什麼。 – Snowman 2010-10-15 03:28:10
請顯示所有這些getters和setters,那裏可能有一個錯誤。 – Thilo 2010-10-15 03:34:17
還有你是不是向我們展示的東西。你的getDirection()方法是否簡單地返回方向,還是它做更奇特的事情?有沒有一種setter方法可以做一些奇怪的事情?你沒有向我們展示過的班級其他部分是否以某種方式修改了方向?
在Java中,int類型的實例變量被初始化爲0,所以你要麼不向我們展示某些東西,要麼你正在使用一些非標準的實現(幾乎肯定不是後者)。
請參閱編輯getter和setter請.. – Snowman 2010-10-15 03:41:10
您發佈的代碼應該工作。你是否從其他類或其他類調用setDirection()? – 2010-10-15 03:48:19
在不相干的筆記上,您可能想重新考慮您的等號方法。等號方法的要點是檢查「this」是否等於「other」。你沒有在方法中引用「其他」應該是一個紅旗... – 2010-10-15 03:51:27
不,它絕對是零,除非你有某個非常「有趣」的初始化器。您應該嘗試刪除'direction'並查看生成的編譯器錯誤。 – 2010-10-15 03:24:32
你確定你正在運行正確的類(從你有的源編譯)嗎? – Thilo 2010-10-15 03:41:56
請顯示所有內容,即使您的'direction'訪問器正常,您也可能在其他地方做一些細微的錯誤操作。 – birryree 2010-10-15 03:44:45