[英]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.