从数组和紧凑中删除索引

时间:2017-04-24 04:08:10

标签: java arrays

我正在为学校制作纸牌游戏,我正在尝试实施一种方法来删除指定索引处的卡片,然后压缩阵列..

这是我到目前为止的代码(非工作) - 任何人都可以给我一些关于我哪里出错的指示?感谢。

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

2 个答案:

答案 0 :(得分:1)

  1. 您在cards[index]遇到类型问题:这没有意义,因为index是一个数组。也许你想循环遍历index
  2. 的元素
  3. 您有一个循环将元素从一个数组复制到另一个数组。但是,你在循环中return true。这意味着你的循环只会运行一次迭代。
  4. 您的代码实际上并未压缩数组或消除给定索引处的卡片。它还没有真正接近。这是一个提示(因为这是作业):现在,你将元素从一个数组复制到另一个数组,同时保持索引相同。如果将索引放入旧数组中,在某些情况下,从索引到新数组的偏移量会有什么不同?
  5. 你可能想尝试写这个,假设只有一张牌可以消除,然后将其推广到多张牌。

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

注意:在索引数组上进行每次迭代后,将索引后的元素复制到从索引位置开始的同一个数组上,并且每次迭代都会更新卡元素索引。