matski
matski

Reputation: 541

Javascript: Mathfloor still generating a 0

In my script to generate a playing card, it's generating a 0, even though my random generator is adding a 1, so it should never be 0. What am I doing wrong?! If you refresh, you'll eventually get a "0 of Hearts/Clubs/Diamonds/Spades":

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);`

Upvotes: 0

Views: 83

Answers (2)

Ry-
Ry-

Reputation: 224932

card%13 === 13

This will evaluate to 0 if card is 13. a % n will never be n. I think you meant:

card % 13 === 0

return theFace;     
return theValue

return exits the function; you'll never get to the second statement.

Upvotes: 3

raina77ow
raina77ow

Reputation: 106375

This line is problematic:

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

Think about it: how a remainder of division to 13 might be equal to 13? ) It may be equal to zero (and that's what happens when you get '0 of... '), but will never be greater than 12 - by the very defition of remainder operation. )

Btw, +1 in generateCard() is not necessary: the 0..51 still give you the same range of cards as 1..52, I suppose.

Upvotes: 4

Related Questions