繁体   English   中英

我使用的是我不完全了解的内容,是吗?

[英]I'm using something i don't entirely understand, clarification?

在我的Card类中,我一直在使用引发新的IllegalException异常,它会导致程序编译,并且大多数程序都可以正常工作,但是我不知道为什么?

我在我的大多数switch语句中都返回String,但是我将它们声明为int吗?

那么如何解决呢?

并且在我想构造一个无效卡(例如不带西装5的卡)的情况下,简单的“这是一个无效的西装”打印行会很好,但是当我尝试时,IllegalException会导致运行时错误执行主要方法。

类卡:

public class Card
{

    private final int CLUBS = 0;
    private final int DIAMONDS = 1;
    private final int HEARTS = 2;
    private final int SPADES = 3;

    private int points = 0;

    private int RANK;
    private int SUIT;



    /**
     * Constructor for objects of class Card
     */
    public Card(int _rank, int _suit)
    {
        this.RANK = _rank;
        this.SUIT = _suit;
    }


    private String translateSuit(int _suit)
    {

        switch(_suit)
        {
            case 0:
                return "Clubs";
            case 1:
                return "Spades";
            case 2:
                return "Hearts";
            case 3:
                return "Diamonds";
        }
        throw new IllegalArgumentException("Invalid suit: " + _suit);
    }

    private String translateRank(int _rank)
    {
        switch(_rank)
        {

            case 0:
                return "Ace";
            case 1:
                return "Two";
            case 2:
                return "Three";
            case 3:
                return "Four";
            case 4:
                return "Five";
            case 5: 
                return "Six";
            case 6:
                return "Seven";
            case 7:
                return "Eight";
            case 8:
                return "Nine";
            case 9:
                return "Ten";
            case 10:
                return "Jack";
            case 11:
                return "Queen";
            case 12:
                return "King";

        }
        throw new IllegalArgumentException("Invalid rank: " + _rank);
    }

    public void setRank(int _rank)
    {
        this.RANK = _rank;
    }

    public int getRank()
    {
        return this.RANK;
    }

    public void setSuit(int _suit)
    {
        this.SUIT = _suit;
    }

    public int getSuit()
    {
        return this.SUIT;
    }

    public String toString()
    {
        return this.translateRank(RANK) + " of " + this.translateSuit(SUIT) + " -- points: " + this.points;
    }
}

我的主要方法是测试构造函数的确认。 我被要求创建6张卡,2张有效卡,3张无效卡(1张无效西服,1张无效等级,以及两者兼而有之)和1张RANDOM卡(仍在努力找出答案)

public static void main(String [ ] args)
    {


        int testNum = 1;
        Card twoOfClubs = new Card(1, 0);
        Card aceOfHearts = new Card(0, 2);
        Card invalid1 = new Card(12, 5);
        Card invalid2 = new Card(15, 2);


        System.out.println(testNum + ": " +
            (twoOfClubs.toString().equals("Two of Clubs -- points: 0") 
                                            ? "Pass" : "Fail"));
        ++testNum;                                    
        System.out.println(testNum + ": " +
            (aceOfHearts.toString().equals("Ace of Hearts -- points: 0") 
                                            ? "Pass" : "Fail"));





        System.out.println(twoOfClubs);
        System.out.println(aceOfHearts);
        System.out.println(invalid1);
        System.out.println(invalid2);

    }

我正在使用引发新的IllegalException异常,它导致程序编译,并且大多数程序都在工作,但我不知道为什么?

基本上,Exception用于处理在运行时而不是编译时发生的问题。 这就是您的代码编译的原因。 与其他任何行一样,您提到的行是有效的代码行。

我在我的大多数switch语句中都返回String,但是我将它们声明为int吗?

您确定这是您的代码吗? 您的某些方法返回的是String类型的值,是的。 两种类型(您在方法签名中指定的一种)和您返回的值的类型都匹配:字符串。 提示:如果不是这种情况,您的代码将无法编译。

您可能用“它们”指的是大多数方法的参数类型,实际上是int。 但是,这与返回值的类型完全无关。

并且在我想构造一个无效卡(例如不带西装5的卡)的情况下,简单的“这是一个无效的西装”打印行会很好,但是当我尝试时,IllegalException会导致运行时错误执行主要方法。

当然,打印出所述行就可以完成工作。 但是使用异常是处理程序中“问题”的一种更为通用的方法。

简单的println是单行,您可以轻松地将其插入Card类。 但是您应该意识到,处理Card类使用过程中出现的问题并不是Card类的问题。 如果您不想打印该行,而是打开一个弹出窗口并显示一条描述错误的消息怎么办? 将所有创建窗口的代码添加到Card类中是一个坏主意,因为它与实际的Card无关。

您可能会想说“ 那么,我只是创建特殊的返回值,例如“”(空字符串)或“错误”,以告知方法的调用者出了点问题。 ”,这将允许您迁移代码,处理Card类之外的可能错误。 但是,这仅是Exception所做的可怜的版本。

简而言之:将对异常进行抛出的方法的调用包装到try / catch(/ finally)块中,以检查在执行此方法期间是否存在任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM