我正在为学校制作纸牌游戏,我正在尝试实施一种方法来删除指定索引处的卡片,然后压缩阵列..
这是我到目前为止的代码(非工作) - 任何人都可以给我一些关于我哪里出错的指示?感谢。
private boolean removeCardsAt(int[] index){
cards[index] = cards[cards.length - 1];
Card[] newCards = new Card[cards.length - 1];
for( int i = 0; i < newCards.length; i++) {
newCards[i] = cards[i];
return true;
}
return false;
}
答案 0 :(得分:1)
cards[index]
遇到类型问题:这没有意义,因为index
是一个数组。也许你想循环遍历index
?return true
。这意味着你的循环只会运行一次迭代。你可能想尝试写这个,假设只有一张牌可以消除,然后将其推广到多张牌。
答案 1 :(得分:0)
考虑paramter paased是要从Cards数组中删除的indecis数组: -
private static boolean removeCardsAtIndex(int[] index){
int cardsLength = cards.length;
for(int i = 0 ; i < index.length ; i++){
int paramInt = index[i];
int numberOfElements = cards.length - paramInt - 1;
if (numberOfElements > 0) {
System.arraycopy(cards, paramInt + 1, cards, paramInt, numberOfElements);
cards[(--cardsLength)] = null;
}
}
Card[] newCards = new Card[cardsLength];
for( int i = 0; i < cardsLength; i++) {
newCards[i] = cards[i];
}
if(newCards.length < cards.length){
return true;
}
return false;
}
注意:在索引数组上进行每次迭代后,将索引后的元素复制到从索引位置开始的同一个数组上,并且每次迭代都会更新卡元素索引。