感謝您檢查我的問題。我有以下代碼爲java甲板。我想擺脫數組和玩具代碼,並嘗試使用最佳實踐和麪向對象的原則,我知道我可以用更簡單但更少重用的方式來實現這一點。如何處理返回對象和處理錯誤
最終目標是創建一個cardgame框架,我可以用它來處理甲板管理的世俗部分,同時專注於不同遊戲的實現。
我遇到了錯誤處理問題。我對draw()代碼的想法如下 -
1)如果有另一張牌返回它並移動迭代器。這將消除丟棄堆的需要,因爲拋棄者將在iterator後面,而.last()卡就是剛纔繪製的那個。 2)如果沒有另一個卡,「卡」是空的,則運行emptyDeck()方法。這個方法將在子類中實現。例如在單人紙牌遊戲中,您可能希望在經過甲板x次後結束遊戲,因此您可能不想再抽一張紙牌。 3)如果套牌不是空的,你沒有更多的卡,那麼你可以調用將被分類的endOfDeck()方法。再次,你可能想洗牌或重置迭代器
但是我得到舊的「必須返回卡」錯誤消息。我試過創建一個自定義異常,但我只能指定一個處理程序方法。任何人都可以提出一個聰明的方法來做到這一點?
public abstract class Deck
{
private ArrayList<Card> cards;
private ListIterator<Card> deckPosition = cards.listIterator();
/**
*
*/
public Deck()
{
}
public Card draw()
{
Card drawn;
try
{
if(deckPosition.hasNext())
{
drawn = deckPosition.next();
}
else if(cards.isEmpty())
{
emptyDeck();
}
else
{
endOfDeck();
}
}
catch(Exception e)
{
System.out.println("Exception when drawing a card, check try/catch block in draw() method of Deck");
e.printStackTrace();
}
finally
{
return drawn;
}
}
public abstract void endOfDeck();
public abstract void emptyDeck();
}
+1 - 遠遠好於返回'null',這通常只會在返回後導致java.lang.NullPointerException。 –
您也可以獲得我的投票! – BobTheBuilder
雖然我會如何處理多個漁獲物?正如我提到的我嘗試使用自定義異常,但是我想處理DeckEmptyException和EndOfDeckException(我仍然可以使用它來重新洗牌或重置迭代器)。另外,它不是內部錯誤,而是狀態可能存在,我想測試和處理。也許我應該把它分解成其他方法,但我希望有一個聰明,乾淨的方式來處理它 – SMC