gpt4 book ai didi

java - 如何处理返回对象和处理错误

转载 作者:行者123 更新时间:2023-12-02 00:01:25 25 4
gpt4 key购买 nike

感谢您查看我的问题。我有以下 Java 套牌代码。我想摆脱数组和玩具代码,并尝试使用最佳实践和面向对象的原则,我知道我可以以一种更简单但可重用性较差的方式来做到这一点。

最终目标是创建一个纸牌游戏框架,我可以用它来处理牌组管理的日常部分,同时专注于不同游戏的实现。

我的错误处理遇到问题。我对 draw() 代码的想法如下 -

1) 如果还有另一张卡,则将其返回并移动迭代器。这将消除对丢弃堆的需要,因为丢弃将位于迭代器后面,而 .last() 卡是刚刚绘制的卡。

2) 如果没有另一张卡并且“cards”为空,则运行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();

}

最佳答案

当方法由于内部错误而无法返回有意义的结果时,该方法应该抛出异常,而不是仅返回某些内容。因此,当您的绘制方法中发生该方法本身无法管理的错误时,它应该抛出一个异常,然后由调用者处理。

在这种情况下,我将创建一个新的异常类DeckEmptyException。当牌组为空时,抽奖方法将抛出该异常,而不是返回一张牌。无论谁调用了draw方法,都必须处理这个异常。

关于java - 如何处理返回对象和处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14753994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com