c#为数组赋值

本文关键字:赋值 数组 | 更新日期: 2023-09-27 18:03:46

我正在尝试编写一个程序,将13张扑克牌从a洗牌到k。发两张牌,然后把每张牌的价值加起来。a = 11, k = 10, j = 10, q = 10, q = 10, 10 = 10, 9 = 9, 8 = 8,等等……有点像21点。

到目前为止,我只能洗牌并随机打印出两张牌,但我不知道如何为每张牌分配值,将它们加起来并打印出来。例如,如果我的两张随机牌是King和Eight,那么我希望程序打印出…

8

18

这是我得到的…

        static void Main(string[] args)
    {
        string[] Cards = new string[] {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "jack", "Queen", "King", "Ace"};
        for (int x = 0; x < 100; x++) // looping the shuffle 100 times to maximize the randomness
        {
            for (int i = Cards.Length; i > 0; i--) //shuffle
            {
                string temp;
                Random random = new Random();
                int r = random.Next(i);
                temp = Cards[r];
                Cards[r] = Cards[i-1];
                Cards[i-1] = temp;
            }  
        }
        Console.WriteLine(Cards[0]); //first random card
        Console.WriteLine(Cards[1]); //second random card
        Console.ReadKey();
    }

c#为数组赋值

你可以在谷歌上搜索《Beginning Visual c# 2012》一书中的KarliCards(你可以很容易地找到完整的PDF,但我不会发布链接,因为我不确定它是否合法)。它有很多东西,比如如何在类或结构体上使用常规操作符(+)。

无论如何,你要找的是一个enum。它非常类似于Rob建议的Dictionary(string)(int)(我不确定如何编写三角括号)。下面是它如何工作的一个例子:

    enum CardValue
    {
        One = 1,
        Two = 2,
        Three = 3,
        Four = 4
    }
    static void Main(string[] args)
    {
        int myInt = (int)CardValue.One;
        Console.WriteLine("output should be 1: " + myInt);
        int mySum = (int)CardValue.One + (int)CardValue.Three;
        Console.WriteLine("output should be 4: " + mySum);
        Console.ReadKey();
    }

我的第一门语言是Perl,所以我倾向于把所有东西都看作一个结构体而不是一个类。总有不止一种方法可以做到....

    public enum CardSuits
    {
        Clubs,
        Spades,
        Hearts,
        Diamonds
    }
    public enum CardValues
    {
        Ace = 1,
        Two = 2,
        Three = 3,
        Four = 4
    }
    public struct Card
    {
        public CardValues Value; // Card.Value = CardValues.Ace
        public CardSuits Suit; // Card.Suit = CardSuits.Spades
        public override string ToString()
        {
            // Card.ToString() == "Ace of Spades"
            return String.Format(Value + " of " + Suit); 
        }
        public string ToStringAsInteger()
        {
            // Card.ToStringAsInteger() == "1 of Spades"
            return String.Format((int)Value + " of " + Suit); 
        }
    }
    static void Main(string[] args)
    {
        Card AceOfSpades = new Card();
        AceOfSpades.Value = CardValues.Ace;
        AceOfSpades.Suit = CardSuits.Spades;
        Card TwoOfClubs = new Card();
        TwoOfClubs.Value = CardValues.Two;
        TwoOfClubs.Suit = CardSuits.Clubs;
        int mySum = (int)AceOfSpades.Value + (int)TwoOfClubs.Value;
        Console.WriteLine("Sum of Ace (1) and Two (2) is: " + mySum); // should be 3
        Console.WriteLine("output of AceOfSpades.ToString() is: " + AceOfSpades.ToString());
        Console.WriteLine("output of AceOfSpades.ToStringAsInteger is: " + AceOfSpades.ToStringAsInteger());
        Console.ReadKey();
    }

我是这样做的:

var cards = new Dictionary<string, int>()
{
    { "Two", 2 }, { "Three", 3 }, { "Four", 4 }, { "Five", 5 }, { "Six", 6 },
    { "Seven", 7 }, { "Eight", 8 }, { "Nine", 9 }, { "Ten", 10 }, { "Jack", 10 },
    { "Queen", 10 }, { "King", 10 }, { "Ace", 11 },
};
var random = new Random();
var selected = cards.OrderBy(c => random.Next()).Take(2).ToArray();
foreach (var card in selected)
{
    Console.WriteLine(card.Key);
}
Console.WriteLine(selected.Sum(c => c.Value));

运行这个,我得到(例如):

Two
Ten
12

现在,只是关于您现有代码的更多信息。

在循环中调用Random random = new Random();将导致许多(如果不是全部)随机数相同。您应该只使用Random的单个实例。

不需要for (int x = 0; x < 100; x++)循环,因为for (int i = Cards.Length; i > 0; i--)循环的单次通过足以随机化卡片。