C# 在数组c中循环#
在我的井字游戏中,我有一个数组声明如下:C# 在数组c中循环#,c#,arrays,loops,casting,C#,Arrays,Loops,Casting,在我的井字游戏中,我有一个数组声明如下: 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; } } 它将所有数组值设置为空字符。 为什么会出现这种情况
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;
}
}
它将所有数组值设置为空字符。
为什么会出现这种情况?我没有将它们设置为空,而是将它们设置为ASCII值0-9,这与字符“0”-“9”非常不同 你想要什么:
for(int i = 0; i < arr.Length; i++)
{
arr[i] = (char)(i + '0');
}
for(int i=0;i
顺便说一下
- 这里不需要
,数组是引用类型李>ref
- 使用
更清晰,可能更快arr.Length
for(int i = 0; i < arr.Length; i++)
{
arr[i] = (char)(i + '0');
}
for(int i=0;i
顺便说一下
- 这里不需要
,数组是引用类型李>ref
- 使用
更清晰,可能更快arr.Length
- 这里发生了一些事情
(1) 您不需要使用
ref
。无论如何,数组都是通过引用有效地传递的。这意味着,您在接受数组的函数中所做的任何更改对函数的调用方都是显而易见的。没有复印件
(2) 您正在将ASCII码(实际上是Unicode码,但在这里并不相关)0到8分配给数组。我想你想要的是实际的数字,可能是别的。在这种情况下,请改用此代码,它将整数i
转换为字符串,并获取该字符串的第一个字符(无论如何只有一个字符):
(3) 确保在
for
循环中使用arr.Length
,因为它允许您更改数组的大小,而无需同时更新for
循环中的代码。一般来说,在代码中避免使用0
和1
以外的常量(与所有规则一样,存在大量例外)。这里有一些情况
(1) 您不需要使用ref
。无论如何,数组都是通过引用有效地传递的。这意味着,您在接受数组的函数中所做的任何更改对函数的调用方都是显而易见的。没有复印件
(2) 您正在将ASCII码(实际上是Unicode码,但在这里并不相关)0到8分配给数组。我想你想要的是实际的数字,可能是别的。在这种情况下,请改用此代码,它将整数i
转换为字符串,并获取该字符串的第一个字符(无论如何只有一个字符):
(3) 确保在
for
循环中使用arr.Length
,因为它允许您更改数组的大小,而无需同时更新for
循环中的代码。通常,在代码中避免使用0
和1
以外的常量(与所有规则一样,存在大量例外)。简单回答,使用arr[i]=char.Parse(i.ToString())代码>而不是arr[i]=(char)i
简单回答,使用arr[i]=char.Parse(i.ToString())代码>而不是arr[i]=(char)i
@LasseV.Karlsen:这并不重要。@LasseV.Karlsen:这并不重要。这与ASCII完全相同。让我们不要混淆。使用arr.Length
可以确保您不会超出与ASCII相同的数组边界。让我们不要混淆。使用arr.Length
可以确保您不会超出数组的界限,这应该是new char[9]{…}
?奇怪的是,您的boardArray的长度是5,而您尝试将其放入9中elements@Mysterion当前位置我猜OP输入了这个而不是复制。这也可能解释了数组声明后神秘的b
。这应该是newchar[9]{…}
?奇怪的是,你的boardArray的长度是5,而你试图把它放在9里面elements@Mysterion当前位置我猜OP输入了这个而不是复制。这也可能解释了数组声明之后神秘的b
。
arr[i] = i.ToString()[0];