Java的。使用一系列索引

时间:2017-04-28 10:19:25

标签: java poker

我正在尝试为扑克游戏编写代码,以使用数组删除某些索引处的卡片。

我到目前为止的代码是以下,并没有工作。

ncard是手中当前的牌数。任何帮助,将不胜感激。

/** 
 * discard the indexed cards from the Hand.
 * @param indices the indices of cards to delete.
 * @return true if all Cards deleted, false if not.
 */

public boolean discard(int[] indices){

    int i = 0;

    while (i < indices.length){

        if (indices[i] < 0 || indices[i] >= ncard)
        {
            return false;
        }

        for (int in = indices[i]; in < ncard; in++){
            cards[in] = null;
            ncard--;


        }
        i++; 

    }
    return true;
}

2 个答案:

答案 0 :(得分:0)

看起来你在静态数组中有卡片,并且将丢弃的索引设置为null。如果您丢弃n张卡然后尝试丢弃索引为52-n的卡,则该方法将返回false并且不再丢弃任何卡。

您应该使用一些动态数据结构(如堆栈或列表)来存储卡。如果您必须使用数组,请按照以下方法解决问题:

您没有在索引处丢弃卡片,而是丢弃每个给定索引与ncard之间的每张卡片(由于空值位于任意位置,因此不能代表最后一张卡片的索引)。该for循环应替换为

cards[indices[i]] = null
deletedCards++;//You should initialize this before the loop

循环之后,你应该输入这段代码:

Arrays.sort(cards, new Comparator<Card>(){
  public int compare(Card a, Card b){
    return Boolean.compare(a==null,b==null);
  }
});

它将空值排序到数组的后面,并保持顺序相同。然后按ncards递减deletedCards

答案 1 :(得分:0)

在这种情况下,我非常推荐使用for循环,因为所有这些i++内容都会使代码难以理解

public boolean discard(int[] indices) {
    // check if all indices consumed are valid
    for(int index : indices) {
        // i just use your validation, don't know, if this is correct though
        if(index < 0 || index >= ncard)
            return false;
    }
    // remove cards
    for(int index : indices) {
        cards[index] = null;
        ncard--;
    }
    return true;
}

我的猜测是问题来自验证,但我需要更多信息来真正解决这个问题...... 也许这将是一个更好的验证整理indexOutOfBounds(负面和正面)和尝试丢弃比ncard更多的卡:

if(index < 0 || index > (cards.length -1) || indices.length > ncard)
    return false;
编辑:我认为卡片是一个具有卡片组大小的阵列,而玩家没有的所有卡片都是空值?