私はカードをパックを作成する宿題があり、ボーナスとしてランダム化します。 3枚のカードが同じスーツを持たないようにランダム化する必要があります。私はFisher-Yates Methodを使用してそれらをランダム化しました。JavaScriptシャッフルデッキなので3つの同じスーツなし
これはほとんどの場合動作しますが、3枚のカードに同じスーツを連続して装着できる可能性はまだあります。
3つのカードを同じスーツかどうか確認するために、ループを実行して3つのカードをスキャンすると、どうすればランダム化機能を再度実行できますか?ここで
は私のコードです:var suits = ["Hearts", "Diamonds", "Spades", "Clovers"];
var faces = ["Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "Kings", "Joker"]
var a = " of "
var deck = [];
var temp = null;
//Looping through arrays, combining faces to each suit
//Faces is length-1 to not insert all jokers
for (i = 0; i < suits.length; i++) {
for (j = 0; j < faces.length-1; j++) {
//Looping through each of the suits
deck.push(faces[j] + a + suits[i])
}
}
//Inserting 1 joker to the deck
deck.push(faces[13])
console.log(deck)
//Shuffle the deck, using Fisher-Yates shuffle
//Researched from Frank Mitchell: https://www.frankmitchell.org/2015/01/fisher-yates/
for (k = deck.length - 1; k > 0; k -= 1) {
m = Math.floor(Math.random() * (k + 1))
temp = deck[k]
deck[k] = deck[m]
deck[m] = temp
}
console.log("^^^^^^^^^^^^^^^^^^^^^")
console.log("---Shuffling Deck----")
console.log("vvvvvvvvvvvvvvvvvvvvv")
console.log(deck)
注:各スーツの種類のループのために行うことですので、最高の私が推測することができるものとして、私はそれがより多くのプロセスが必要になります知っている(この探索ループ4を実行していますindexOf(suits [i])を使用して、デッキ[i + 1]と[i + 2]を比較するにはどうすればよいですか?私が探しているスーツとデッキのスーツの比較を作成するにはどうしたらいいですか? 「スペードの5」
だから私はそれらを文字列にするという要件を扱っています。どのようにして部分文字列を抽出すればよいのですか? –
@ as.beaulieu、 "私はどのように部分文字列を抽出するのですか"と答えました。 (正規表現を使用してください)問題がある場合は、問題を具体的に質問してください。 –
データを文字列ではなくオブジェクトとして処理し、文字列要件のためにデータを処理しないで、最後に文字列として返すのはなぜですか? – David