【问题标题】:C# Insert Array Values via for loopC#通过for循环插入数组值
【发布时间】:2012-06-04 06:47:15
【问题描述】:

大家好

我想要做的是调用“FillDeck”方法来用 52 个数组元素填充“deck []”。 for 循环用于添加元素 - 出于测试目的,它只是添加来自 for 循环的 y+x 值。 我所做的是使用变量“placement”来指示我的索引位置,然后增加放置变量,因此对于每次循环迭代,索引都会增加,从而将数组元素添加到该特定索引。但是,我得到了我想要弄清楚的 IndexOutOfRangeException。

注意:我不能自动为数组使用预先确定的值,我必须调用一个方法,目的是将值添加到数组中。由于它是一个具有嵌套 for 循环来确定等级/花色的卡片组,因此是解决此问题的好方法。

谢谢 =)

    static void Main(string[] args)
    {
        int [] deck = {};
        FillDeck(deck); // Error Here
    }
    public static void FillDeck(int[] deck)
    {
        int placement = 0;
        // 0 = Ace , 12 = King : 0 = Hearts, 1 = Diamonds, 2 = Clubs, 3 = Spades
        for (int x = 0; x < 13; x++)
            for (int y = 0; x < 4; ++y)
            {
                deck[placement] = x + y;// Error here
                ++placement;
            }

    }

【问题讨论】:

  • 除了不将数组实例化为正确的大小 (52) 之外,您的计数器只会上升到 48。您的 x 计数器只会上升到 12,而不是 13。

标签: c#


【解决方案1】:
int [] deck = {}

这将创建一个大小为 0 的数组。
你不能在里面放任何东西。

你需要写new int[52](或其他适当的数字)来创建一个真正可以容纳东西的数组。

或者,您可以创建一个List&lt;T&gt;,它可以通过调用Add() 方法扩展到任何(合理的)大小。

【讨论】:

  • 这是有道理的,我有一个大概的想法,可能是一个未指示数组大小的问题。虽然我的编程技能有限,但我不知道 List 或 Add() 方法,我该如何使用它们
  • @JRoy List 表示 T 类型的通用列表。所以你可以这样做: var deck = new List();然后调用deck.Add(x + y);
【解决方案2】:

当然有错误,数组初始大小为 0 意味着没有元素可以存储在其中。 希望下面的代码可以帮助到你:

    public static int[] FillDeck()
    {
        var deck = new List<int>();
        // 0 = Ace , 12 = King : 0 = Hearts, 1 = Diamonds, 2 = Clubs, 3 = Spades
        for (int x = 0; x < 13; x++)
            for (int y = 0; x < 4; ++y)
            {
                deck.Add(x + y);
            }

        return deck.ToArray();

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 2021-07-01
    • 2019-11-18
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多