在我的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);
}
答案 0 :(得分:2)
我使用了抛出新的IllegalException,它导致程序编译并且大部分工作,但我不知道为什么?
基本上,Exception用于处理在运行时发生的问题,而不是编译时间。 这就是你的代码编译的原因。 您提到的行是一行有效的代码,就像任何其他行一样。
我在大多数switch语句中都返回一个String但是我 宣称他们是一个int?
您确定这是您的代码吗? 你的一些方法返回String类型的值,是的。 这两种类型,您在方法签名中指定的类型和返回的值的类型匹配:String。 提示:如果不是这样的话,你的代码就不会编译。
你可能指的是"他们"是大多数方法的参数类型,实际上是int。 但是,这与返回值的类型完全无关。
并且在我要构建一张无效卡片的情况下,就像一张没有套装5的卡片,它不存在,一个简单的"这是一个无效的套装"打印行会很好但是当我尝试执行main方法时,IllegalException会导致运行时错误。
打印出来的线路确实完成了工作。 但是,使用例外是处理问题的一种更通用的方式"在你的程序中。
简单的println是一行,您可以轻松插入您的Card类。 但是你应该意识到,Card类的关注点不是处理它使用过程中出现的问题。 如果您不想打印该行,但打开弹出窗口并显示描述错误的消息,该怎么办? 将创建窗口的所有代码添加到Card类中是一个坏主意,因为它与实际的卡无关。
你可能很想说" 那么,我只是创造了特殊的回报价值,就像"" (空字符串)或"错误"告诉调用者该方法出错了。"这将允许您迁移处理Card类之外的可能错误的代码。 然而,这只不过是Exceptions所做的糟糕版本。
简而言之: 包含对try / catch(/ finally)块中的异常抛出的方法的调用,以检查执行此方法时是否存在任何问题。