【发布时间】:2013-01-23 02:56:17
【问题描述】:
感谢您查看我的问题。我有以下用于 Java 平台的代码。我想摆脱数组和玩具代码,并尝试为此使用最佳实践和面向对象的原则,我知道我可以用一种更简单但可重用性较低的方式来做到这一点。
最终目标是创建一个纸牌游戏框架,我可以用它来处理套牌管理的日常部分,同时专注于不同游戏的实现。
我的错误处理有问题。我对 draw() 代码的想法如下 -
1) 如果有另一张卡,则返回它并移动迭代器。这将消除对弃牌堆的需要,因为弃牌将位于迭代器后面,而 .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();
}
【问题讨论】:
标签: java exception-handling arraylist iterator return