在Java中对数组进行排序并处理任何空值

时间:2017-04-29 02:29:41

标签: java arrays sorting

需要为我的项目编写排序方法..它是一个卡片游戏。这些是该方法的规范。

  • 不能使用arrays.sort()或任何其他外部库例程。
  • 按照卡值
  • 的升序对手进行排序
  • 设置排序为true。
  • 处理数组(手)未满/包含空值的情况。和 处理卡阵列未满时的情况。

下面是我到目前为止的代码,但是需要处理空值而不是完整数组(手)。任何建议或指示将不胜感激。感谢。

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;
}

1 个答案:

答案 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。当你正在积极地整理手牌时,没有人会检查旗帜。