得到错误的答案时,试图从数组中获得k个子集在ActionScript



我正在制作一款德州扑克游戏,我需要从纸牌数组中生成所有可能的k个子集(在本例中以数字表示)。这是到目前为止的样子:

public function getKSubsetsFromArray(arr:Array, k:int):Array {
        var data:Array = new Array();
        var result:Array = new Array();
        combinations(arr, data, 0, arr.length - 1, 0, k, result, 0);
        return result;
    }
    public function combinations(arr:Array, data:Array, start:int, end:int, index:int, r:int, resultArray:Array, resultIndex:int):int {
        if (index == r) {
            trace(resultIndex, data);
            resultArray[resultIndex] = data;
            return ++resultIndex;
        }
        for (var i:int = start; i<=end && end-i+1 >= r-index; i++) {
            data[index] = arr[i];
            resultIndex = combinations(arr, data, i + 1, end, index + 1, r, resultArray, resultIndex);
        }
        return resultIndex;

    }

我是新的Actionscript,我的想法是有一个函数,它需要一个数组的数字和参数k,并返回数组的每个大小k的数组。然而,一旦我测试的函数,我得到一个数组只包含最后的组合nCk次。例如:

var testArray:Array = new Array(1, 2, 3, 4, 5);
trace(getKSubsetsFromArray(testArray, 3));

的回报:

0 1,2,3
1 1,2,4
2 1,2,5
3 1,3,4
4 1,3,5
5 1,4,5
6 2,3,4
7 2,3,5
8 2,4,5
9 3,4,5

函数输出为

3,4,5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5,3,4,5

当然,它应该打印一个包含前面列出的所有组合的数组,但它只打印最后一个组合的正确次数。

谢谢你的帮助。

错误的原因是当你制作数组的数组时,你实际上使用了相同数组(数据)的引用,所以当最后一次组合执行时,数据数组的包含成为3,4,5, resultArray的每个索引指向数据数组,因此它打印出相同的值。

解决方案:-

if (index == r) {
            trace(resultIndex, data);
            var result = new Array();
            copy(result,data)
            resultArray[resultIndex] = result;
            return ++resultIndex;
}

注意:-

以上是伪代码,因为我不熟悉actionscript,但你可以实现复制函数,复制数据值到结果在actionscript语法

最新更新