【问题标题】:Array functions 'push' and 'splice' Javascript数组函数 'push' 和 'splice' Javascript
【发布时间】:2022-01-26 01:49:56
【问题描述】:

黑桃1,方块1,梅花1,红桃1,黑桃2,方块2,梅花2,红桃2,黑桃3,方块3,梅花3,红桃3 ,黑桃4,方块4,梅花4,红桃4,黑桃5,方块5,梅花5,红桃5,黑桃6,方块6,梅花6,红桃6,7黑桃,方块7,梅花7,红桃7,黑桃8,方块8,梅花8,红桃8,黑桃9,方块9,梅花9,红桃9,黑桃10 ,10 个方块,10 个梅花,10 个红桃

,,,

[这是程序返回的内容]

我正在尝试用 JavaScript 编写一个允许某人玩扑克的程序。我在可汗学院使用 ProcessingJS 终端。以下是我到目前为止的完整程序。它应该做的是创建一个名为 deck 的数组,其中包含一副牌中所有牌的名称(不包括面牌)。该程序的那部分有效。下一部分尝试创建一个名为 current 的新数组,它是 deck 的精确副本。然后它尝试打印出当前的,并且它成功地打印了。

最后一个 for 循环是导致问题的原因。它试图从当前的牌中随机抽取一张牌,并将其复制到另一个名为 player 的数组中,该数组应该是玩家的手牌。然后它会尝试从当前阵列中移除该卡。

但是,当它试图打印出数组播放器时,它打印的只是三个逗号。我不知道问题是什么,并且我查看了许多谈论推送和拼接的网站。我真的不知道出了什么问题。

再次,我希望程序显示玩家的手。感谢您的帮助。

var deck = [];
var current = [];
var enemy = [];
var player = [];
var suits = ['spades', 'diamonds', 'clubs', 'hearts'];

for (var i = 1; i < 11; i++) {
    for (var x = 0; x < 4; x++) {
        if (i <= 10) {
            deck.push(i + ' of ' + suits[x]);
        }
    }
}

for (var c = 0; c < 40; c++) {
    current[c] = deck[c];
}

println(current);
var y;

for (var a = 0; a < 4; a++) {
    y = random(0, (current.length - 1));
    player.push(current[y]);
    current.splice(y);
}

println(player);
    

【问题讨论】:

    标签: javascript arrays push splice


    【解决方案1】:

    为什么不直接简化而不使用拼接呢?

    据我了解,您正在使用random 抽牌。因此,只需使用player.push(current[y]) 将该牌推到玩家手上即可。

    另外,当您调用current.splice(y) 时,我认为您不会只删除已抽出的牌。这会删除牌组中的每张牌after the indexy。将其更改为 current.splice(y, 1)

    【讨论】:

    • 您对 current.splice(y, 1) 的更改有效,但是当我更改为 player.push(current[y]) 时,我仍然看到显示玩家手牌的问题。逗号还在。不过,感谢您的帮助!
    • 试试这个调试 - 每次迭代后打印“y”,看看它是什么数字,以及在每次添加后打印 current[y] 和 player。
    • 发现问题 - 它返回 y 的十进制值。数组没有十进制索引。谢谢!
    • 我想 - math.random() 通常返回 0 到 1,所以我想知道您是否使用自定义实现或类似的东西。很高兴您发现了问题 - 干得好。
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 2014-08-30
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多