我使用的东西我完全不了解,澄清了吗?

时间:2015-03-22 19:28:25

标签: java exception constructor

在我的Card类中,我正在使用throw新的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;
    }
}

和我的main方法,它正在测试构造函数的确认。我被要求创建6张卡,2张有效卡,3张无效卡(1张无效套装,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);

    }

1 个答案:

答案 0 :(得分:2)

  

我使用了抛出新的IllegalException,它导致程序编译并且大部分工作,但我不知道为什么?

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

  

我在大多数switch语句中都返回一个String但是我   宣称他们是一个int?

您确定这是您的代码吗? 你的一些方法返回String类型的值,是的。 这两种类型,您在方法签名中指定的类型和返回的值的类型匹配:String。 提示:如果不是这样的话,你的代码就不会编译。

你可能指的是"他们"是大多数方法的参数类型,实际上是int。 但是,这与返回值的类型完全无关。

  

并且在我要构建一张无效卡片的情况下,就像一张没有套装5的卡片,它不存在,一个简单的"这是一个无效的套装"打印行会很好但是当我尝试执行main方法时,IllegalException会导致运行时错误。

打印出来的线路确实完成了工作。 但是,使用例外是处理问题的一种更通用的方式"在你的程序中。

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

你可能很想说" 那么,我只是创造了特殊的回报价值,就像"" (空字符串)或"错误"告诉调用者该方法出错了。"这将允许您迁移处理Card类之外的可能错误的代码。 然而,这只不过是Exceptions所做的糟糕版本。

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