gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:36:32 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

您的代码没有假设任何特定数量的牌,因此它已经处理了非满手牌。那里不需要任何东西。

if(cards[j].getValue().compareTo(cards[i].getValue()) < 0)

您需要处理 cards[i]cards[j] 为空的情况。您不想在空值上调用 .getValue();它会抛出一个 NullPointerException

要处理三种情况:一张牌为空,另一张为空,或者两者都是。如果它们都是空的,你不需要交换任何东西。如果一个为 null 但另一个不为 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) {
...
}

我把它留作练习,使用 || 将适当的“交换”案例组合成单个 if。当心!在调用 .getValue() 之前,您需要确保两张卡片都不为空。检查的顺序至关重要。

else {
isSorted = false;
}

顺便说一下,不需要这个子句。只需在方法末尾将 isSorted 设置为 true 即可。您不需要在排序过程中将其设置为 false。当您积极地对手牌进行排序时,没有人会检查标志。

关于java - 在 Java 中对数组进行排序并处理任何空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43691224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com