提问人:Danny Thompson 提问时间:2/17/2023 最后编辑:cyberbrainDanny Thompson 更新时间:2/17/2023 访问量:139
如何做一个空数组
How to do an empty array
问:
我这里有这个问题
一旦玩家从牌组中抽出最上面的牌,他们就必须丢弃它。
给定一副牌,返回一副新牌,其中包含除原始牌组中的第一张牌之外的所有牌。
注意:返回的新数组比原始数组短一个元素,除非牌组没有牌。则返回的数组必须为空。
所以基本上我必须创建一个与旧数组相同的新数组减去索引 0 处的卡。我遇到的问题是当我必须放置一个空数组并且 IntelliJ 不断抛出 NegativeArraySizeException 时。
public String[] discardTopCard(String[] remainingDeck) {
String[] newHand = new String[remainingDeck.length - 1];
String[] emptyArray = new String[] {};
int k = 0;
if (remainingDeck.length == 0 || remainingDeck.length == 1) {
return emptyArray;
}
for (int i = 1; i < remainingDeck.length; i++) {
newHand[k] = remainingDeck[i];
k++;
}
return newHand;
}
这是我当前的代码。
我也试过了这个,只是将其设置为空
public String[] discardTopCard(String[] remainingDeck) {
String[] newHand = new String[remainingDeck.length - 1];
int k = 0;
if (remainingDeck.length == 0 || remainingDeck.length == 1) {
return remainingDeck;
}
for (int i = 1; i < remainingDeck.length; i++) {
newHand[k] = remainingDeck[i];
k++;
}
return newHand;
}
答:
0赞
cyberbrain
2/17/2023
#1
如果您想使用仅是现有 on 一部分的新数组,我建议使用现有方法:java.util.Arrays.copyOfRange
例:
private static final String[] EMPTY_STRING_ARRAY = new String[0];
public String[] discardTopCard(String[] remainingDeck) {
int length = remainingDeck.length;
if (length < 2) {
return EMPTY_STRING_ARRAY;
}
return Arrays.copyOfRange(remainingDeck, 1, length);
}
我在方法外部将空字符串数组声明为常量,因为它是不可变的,并且没有必要在整个程序中创建多个实例。
在这两种情况下,空输入数组和长度为 1 的输入数组将产生相同的结果:空数组。
另请注意,在方法中使用 of 是可以的,因为它充当“to”索引,而不是要复制的元素数。length
copyOfRange
0赞
Philippe Fery
2/17/2023
#2
或者,更简单:
public String[] discardTopCard(String[] deck) {
if (deck.length > 1)
deck = Arrays.copyOfRange(deck, 1, deck.length);
return deck;
}
评论
0赞
Old Dog Programmer
2/17/2023
如果?deck.length == 1
0赞
Philippe Fery
2/17/2023
public String[] discardTopCard(String[] deck) { if (deck.length > 0) deck = Arrays.copyOfRange(deck, 1, deck.length);
0赞
Philippe Fery
2/17/2023
你是对的;-)
0赞
Adriaan Koster
2/17/2023
#3
这个怎么样?
public String[] discardTopCard(String[] deck) {
if (deck.length == 0) {
return deck;
}
String[] smallerDeck = new String[deck.length - 1];
for (int i = 0; i < smallerDeck.length; i++) {
smallerDeck[i] = deck[i];
}
return smallerDeck;
}
评论
ArrayList
newHand
Array
if
Array