当前位置: 首页 > 知识库问答 >
问题:

为什么这个数组出界了?

韦高阳
2023-03-14
class Program
{
    static void Main(string[] args)
    {
        string[] deck = {"1♥","2♥","3♥","4♥","5♥","6♥","7♥","8♥","9♥","10♥","11♥","12♥","13♥",
                     "1♦","2♦","3♦","4♦","5♦","6♦","7♦","8♦","9♦","10♦","11♦","12♦","13♦",
                     "1♣","2♣","3♣","4♣","5♣","6♣","7♣","8♣","9♣","10♣","11♣","12♣","13♣",
                     "1♠","2♠","3♠","4♠","5♠","6♠","7♠","8♠","9♠","10♠","11♠","12♠","13♠"};

        string[] player = new string[26];
        string[] computer = new string[26];

        deck = Shuffle(deck);

        foreach (string d in deck)
        {
            Console.WriteLine(d);
        }

        Console.WriteLine(deck.Length);

        for (int i = 0; i < 26; i++)
        {
            player[i] = deck[i];
            Console.WriteLine(player[i]);
        }

        for (int j = 26; j < 52; j++)
        {
            computer[j] = deck[j];
            Console.WriteLine(computer[j]);
        }


    }

    static string[] Shuffle(string[] deck)
    {
        Random r = new Random();

        for (int i = deck.Length; i > 0; i--)
        {
            int j = r.Next(i);
            string k = deck[j];
            deck[j] = deck[i - 1];
            deck[i - 1] = k;
        }
        return deck;
    }

}

它将把牌阵的一半分配给玩家和计算机(玩家得到前半部分,计算机得到后半部分)。现在这是先洗牌,所以是的,这似乎是公平的。

我得到的出界错误是这一行:

computer[j] = deck[j];

共有1个答案

终弘厚
2023-03-14

您需要从0开始索引computer,而不是从26开始:

for (int j = 26; j < 52; j++)
{
    computer[j - 26] = deck[j];
    Console.WriteLine(computer[j - 26]);
}

或者,偏移deck索引:

for (int i = 0; i < 26; i++)
{
    computer[i] = deck[i + 26];
    Console.WriteLine(computer[i]);
}

如果您不需要打印初始卡片,则可以使用LINQ更简洁地实现这一点:

player = deck.Take(26).ToArray();
computer = deck.Skip(26).ToArray();
 类似资料:
  • 对于特定的任务,我需要在可变数组中进行大量快速、单独的写操作。为了检查性能,我使用了以下测试:

  • 问题内容: 当我遇到性能问题时,我只是更改了一个正在编写的程序,以将数据存储为numpy数组,而两者之间的区别令人难以置信。最初耗时30分钟,而现在耗时2.5秒! 我想知道它是如何做到的。我认为这是因为它消除了对循环的需要,但除此之外,我感到很困惑。 问题答案: 块状阵列是均质类型的密集堆积阵列。相比之下,Python列表是指向对象的指针数组,即使它们都属于同一类型。因此,您可以获得引用局部性的好

  • 我遵循这个教程: https://www.w3schools.com/php/php_xml_dom.asp 循环遍历XML部分是有问题的。出于某种原因,PHP将DOM对象视为数组。此外,var_dump除了长度之外,不返回任何关于对象属性的信息,但程序输出看起来像是不知从何而来。foreach可以通过某种方式循环对象吗?如果有,这些属性(节点名和节点值)包含在哪里,因为var_dump没有显示它

  • 我尝试了一切,但图像不会显示出来,我试图使图像变小但没有用,我试图改变路径,我试图改变图像的位置但没有帮助,我试图在互联网上搜索但一无所获。 我看到的只是空白的图形用户界面,没有文本和图像。如果你能帮我,你会帮我一个大忙。 代码如下:

  • 我用PHP编写了这个脚本: $lang是en。但是当我调用函数如as

  • 有人问我这个问题,我只是回答“因为JVM需要移动对象”,但后来我搜索了一下,似乎找不到任何合理的答案。