0

トランプを生成するスクリプトでは、ランダムジェネレーターが1を追加しているにもかかわらず、0を生成しているため、0になることはありません。何が問題なのですか。リフレッシュすると、最終的に「ハート/クラブ/ダイヤ/スペードの0」が表示されます。

var theSuit;
var theFace;
var theValue;
var theCard;

// deal a card
function generateCard() {
    var randomCard = Math.floor(Math.random()*52+1)+1;  
    return randomCard;
};

function calculateSuit(card) {
    if (card <= 13) {
        theSuit = "Hearts";
    } else if ((card > 13) && (card <= 26)) {
        theSuit = "Clubs";      
    } else if ((card > 26) && (card <= 39)) {
        theSuit = "Diamonds";
    } else {
        theSuit = "Spades";
    };  

    return theSuit;
};

function calculateFaceAndValue(card) {
    if (card%13 === 1) {
        theFace = "Ace";
        theValue = 11;
    } else if (card%13 === 13) {
        theFace = "King";
        theValue = 10;          
    } else if (card%13 === 12) {
        theFace = "Queen";
        theValue = 10;
    } else if (card%13 === 11) {
        theFace = "Jack";
        theValue = 10;
    } else {
        theFace = card%13;
        theValue = card%13;
    };

    return theFace;     
    return theValue
};

function getCard() {
    var randomCard = generateCard();        
    var theCard = calculateFaceAndValue(randomCard);
    var theSuit = calculateSuit(randomCard);            
    return theCard + " of " + theSuit + " (this card's value is " + theValue + ")";
};

// begin play
var myCard = getCard();
document.write(myCard);`
4

2 に答える 2

4

この行には問題があります。

} else if (card%13 === 13) {

考えてみてください。13への除算の余りは13に等しいのでしょうか。)それはゼロに等しいかもしれません(そしてそれはあなたが '0 of ...'を取得したときに起こることです)が、12を超えることは決してありません-剰余演算の定義によって。)。

ところで、+1generateCard()インチは必要ありません。0..51でも1..52と同じ範囲のカードが得られると思います。

于 2012-06-16T15:58:59.130 に答える
3
card%13 === 13

0これは、であるかどうかに評価されcardます13a % n決してなりませんn。私はあなたが意味したと思います:

card % 13 === 0

return theFace;     
return theValue

return関数を終了します。2番目のステートメントに到達することはありません。

于 2012-06-16T16:00:03.457 に答える