需要为我的项目编写排序方法..它是一个卡片游戏。这些是该方法的规范。
下面是我到目前为止的代码,但是需要处理空值而不是完整数组(手)。任何建议或指示将不胜感激。感谢。
public void sortHand(){
// loop over every slot
for (int i = 0 ; i < cards.length; i++) {
for (int j = i+1 ; j < cards.length; j++) {
//getValue returns face value of card
if(cards[j].getValue().compareTo(cards[i].getValue()) < 0) {
//swap
Card temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
else {
isSorted = false;
}
}
}
isSorted = true;
}
答案 0 :(得分:4)
您的代码并未假设任何特定数量的卡片,因此它已经处理了非完整的手牌。那里什么都不需要。
if(cards[j].getValue().compareTo(cards[i].getValue()) < 0)
您需要处理cards[i]
或cards[j]
为空的情况。您不想在空值上调用.getValue()
;它会抛出NullPointerException
。
有三种情况需要处理:一个卡为空,另一个为空,或两者都是。如果它们都为空,则您不需要交换任何内容。如果一个为null而不是另一个,则需要确定null是先进行还是最后进行。在一种情况下,您将进行交换,而在另一种情况下,您将无所事事。
if (cards[i] == null && cards[j] == null) {
// no swap
}
else if (cards[i] == null && cards[j] != null) {
// swap if nulls go last, otherwise do nothing
}
else if (cards[i] != null && cards[j] == null) {
// swap if nulls go first, otherwise do nothing
}
else if (cards[j].getValue().compareTo(cards[i].getValue()) < 0) {
...
}
我把它留作练习来结合适当的&#34;交换&#34;使用if
将案例合并为一个||
。小心!在致电.getValue()
之前,您需要确保这两张卡都不为空。检查的顺序至关重要。
else { isSorted = false; }
顺便说一下,这个条款没有必要。只需在方法结束时将isSorted
设置为true
即可。您不需要在排序过程中将其设置为false
。当你正在积极地整理手牌时,没有人会检查旗帜。