【问题标题】:Unhandled Exception in Poker Game扑克游戏中未处理的异常
【发布时间】:2023-03-11 12:32:02
【问题描述】:

我有一个多部分程序(2 个 java 文件),它应该做两件事:

  1. 制作一副纸牌(包括洗牌、发牌、重置)

  2. 创建一个扑克游戏(制作两副牌,其他东西……)

由于这个未处理的异常错误,我遇到了一个障碍,我什至不确定它来自哪里。错误如下图,源代码如下。

。

扑克牌异常类

class PlayingCardException extends Exception {

    /* Constructor to create a PlayingCardException object */
    PlayingCardException (){
        super ();
    }

    PlayingCardException ( String reason ){
    super ( reason );
    }
}

.

甲板课 /** class Decks 表示:n 副扑克牌 *使用类卡构建n * 52张扑克牌! * * 不要添加新的数据字段! * 不要修改任何方法 * 您可以添加私有方法 */

class Decks {

    /* this is used to keep track of original n*52 cards */
    private List<Card> originalDecks;   

/* this starts with n*52 cards deck from original deck   */
/* it is used to keep track of remaining cards to deal */
/* see reset(): it resets dealDecks to a full deck      */
private List<Card> dealDecks;

/* number of decks in this object */
private int numberDecks;


 /**
 * Constructor: Creates n decks (52 cards each deck) of playing cards in
 *              originalDecks and copy them to dealDecks.
 *              initialize numberDecks=n
 * Note: You need to catch PlayingCardException from Card constructor
 *       Use ArrayList for both originalDecks & dealDecks
 * @throws PlayingCardException 
 */
public Decks(int n) throws PlayingCardException
{
    // implement this method!
    this.originalDecks = new ArrayList<Card>();
    this.dealDecks = new ArrayList<Card>();
    int i, j, k;
    numberDecks = n;
    for (k=0;k<n;k++){
        for (i=1;i<14;i++) 
        {
            for(j=0;j<4;j++) 
            {
                Card orcard = new Card(i,j);
                originalDecks.add(orcard);
                dealDecks.add(orcard);
            }
        }
        }
    }
}

【问题讨论】:

  • 你在处理 main() 中的异常吗?可以显示主要代码吗?
  • 阅读java.dzone.com/articles/business-logic-domain-objects。从设置值的工厂类构造对象是一种常见模式。 DeckFactory 包含您在工厂中使用卡片填充 Deck 的逻辑。当你想要一个新的甲板时,调用 DeckFactory.createNewDeck(int n);

标签: java exception-handling unhandled-exception poker playing-cards


【解决方案1】:

在 Decks 类的构造函数中声明了这个检查异常。

public Decks(int n) throws PlayingCardException

让构造函数抛出异常并不是一个好主意。

你确定构造函数中的代码会抛出这个异常吗?

尝试将此代码移至可在主代码中调用的另一个方法。

【讨论】:

  • 如果我从构造函数中删除“throws PlayingCardException”,我会在尝试制作新卡(i,j)时收到 Unhandled Exception 错误;
  • 所以可能会在构造函数中捕获(并处理)异常 - 不要重新抛出它。
  • 通常你应该在你的构造函数中使用 try catch 块来处理异常。
  • 啊哈!完美的! try-catch 块清除了一切。我正在使用 IDE 的建议向该方法添加“throws PlayingCardException”,这是一个坏主意。谢谢你。
【解决方案2】:

您的构造函数声明PlayingCardException 是checked exception。这意味着您必须抓住它。

既然您试图将其用作静态字段,为什么还要将其设置为已检查异常呢?改为扩展RuntimeException,如果它出现,您不必在任何时候想要使用它时检查它。这样,您可以按照自己的方式进行静态初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多