【问题标题】:Looping through an array c#循环遍历数组c#
【发布时间】:2015-01-31 20:38:18
【问题描述】:

在我的井字游戏中,我有一个声明如下的数组:

static char[] boardArray = new char[9]{ '0', '1', '2', '3', '4', '5', '6', '7', '8'};

我有一个

private static void resetBoard(ref char[] arr)
{
for(int i = 0; i < 9; i++) {
    arr[i] = (char)i;
    }
}

但是当我调用这个方法时:

resetBoard(ref boardArray);

它将所有数组值设置为一个空字符。 为什么会这样?

【问题讨论】:

  • 应该是new char[9]{...}
  • 奇怪的是,您的 boardArray 的长度为 5,而您尝试放入 9 个元素
  • @Mysterion:我猜是 OP 输入了这个而不是复制。这也可以解释数组声明后神秘的b

标签: c# arrays loops casting


【解决方案1】:

我没有将它们设置为空,而是设置为 ASCII 值 0 - 9,这与字符 '0' - '9' 非常不同。

你想要什么:

for(int i = 0; i < arr.Length; i++) 
{
   arr[i] = (char)(i + '0');
}

顺便说一句,

  • 这里不需要ref,数组是引用类型。
  • 使用arr.Length 更清晰,可能更快

【讨论】:

  • 与 ASCII 相同。我们不要混淆了。
  • 并使用arr.Length 确保您不会超出范围
【解决方案2】:

这里发生了一些事情。

(1) 您不需要使用ref。无论如何,数组都是通过引用有效地传递的。这意味着您在一个采用数组的函数中所做的任何更改对于函数的调用者来说都是显而易见的。没有制作副本。

(2) 您正在将 ASCII(实际上是 Unicode,但在这里无关紧要)代码 0 到 8 分配给您的数组。我假设您想要实际的数字,这将是另一回事。在这种情况下,请改用此代码,它将整数 i 转换为字符串并获取该字符串的第一个字符(反正只有一个字符):

arr[i] = i.ToString()[0];

(3) 确保在for 循环中使用arr.Length,因为它允许您更改数组的大小,而无需同时更新for 循环中的代码。通常,在您的代码中避免使用除01 之外的常量(与所有规则一样,有很多例外)。

【讨论】:

  • @LasseV.Karlsen:没关系。
【解决方案3】:

简单的答案,使用arr[i] = char.Parse(i.ToString()); 而不是arr[i] = (char)i;

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多