This course will be retired on June 1, 2025.
Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
In this video we'll see how we can write a function to map the numbers 0-51 to each of the 52 cards in a deck!
Kotlin Links
Project Files
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
So we need a function which maps
the numbers zero through 51.
0:00
To each of the 52 cards in
a standard deck of cards.
0:04
Here's how we're going to do it.
0:08
First, the value of a card will
be equal to the index mod 13.
0:10
There are thirteen cards of each suit.
0:14
So taking the index mod thirteen will
give us four sets of zero through 12.
0:17
Perfect.
0:23
Second, the suit of a card will be split
out based on the index divided by 13.
0:24
Which, since they're both integers,
will result in an integer.
0:29
Leaving us with a nice breakdown of zeros,
ones, twos and threes.
0:34
Then, we just need to choose which
number represents which suit.
0:38
And we're done.
0:42
Cool.
0:43
Let's add some space
above our cards array,.
0:44
And get to work on this function.
0:46
Start with the fun keyword.
0:49
And then let's name it, index to card.
0:51
Then, for the parameter,
let's pass in i and make it an int.
0:56
Then let's add a colon, and
specify card as the return type.
1:01
And then add our brackets.
1:06
Then, let's make a new val named value.
1:08
And set it equal to i mod 13.
1:12
And let's make another new val,
named suit.
1:16
And set it equal to when I,
divided by thirteen.
1:21
And then add brackets.
1:29
In Kotlin, instead of the switch
statement, we have the win statement.
1:30
And it looks like this.
1:37
So when I divided by thirteen is zero.
1:39
Let's set suit equal to clubs.
1:42
Then let's set command or
control+D three times, And
1:46
then let's change these
1:53
to 1 and diamonds.
1:59
2 and
2:04
hearts.
2:07
And three with spades.
2:12
Cool.
2:19
But we're getting an error that.
2:20
When expression must be exhaustive.
2:23
Add necessary else branch.
2:26
Normally, you can write a when statement
without needing an else branch.
2:28
But since we're using this when
statement to populate our suit property.
2:32
It must return a value.
2:37
So lets just change the three to an else.
2:38
And we're good to go.
2:43
All that's left is to
return a new card instance.
2:44
Return card of value and suit.
2:47
All right.
2:53
We've got our function
mapping each index to a card.
2:54
Now we just need to pass in this function
as the second parameter to our array.
2:57
Unfortunately, we can't just
pass in the name of a function.
3:02
But what we can do,
is pass in anonymous function.
3:06
To make a function anonymous in Kotlin,
all we have to do is remove the name.
3:10
We can then store this function and
a variable like that.
3:17
And then use this variable
down here in our array.
3:22
Or, even better, we can just cut and
3:27
paste the whole function
into the second parameter.
3:29
And now, when we create a new deck,
we'll be ready with all 52 cards.
3:43
But we're not done yet.
3:49
This code can still look a bit better.
3:51
And we'll see how in the next video.
3:53
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up