新实例化的数组的长度解析为0或null吗?
本文关键字:null 数组 实例化 | 更新日期: 2023-09-27 18:08:51
作业:我在下面的代码中获取和索引越界。这是一个绞刑游戏,我要记录我在char
数组中猜出的字母。
下面是我做的假设:
- 在调用方法中,我有一个未填充的数组(
char[] displayGuesses = new char[26];
)作为char[] usedLetters
参数传递给下面的方法。 - 猜字母的第一次迭代,数组将为空。
- 长度为0。
- 我用
letterGuessed
参数填充usedLetters[0]
。 -
下一次我猜,数组的长度将是1,所以
usedLetters[1]
得到填充…等等。public char[] trackUsedLetters(char letterGuessed, char[] usedLetters) { int letterIndex = usedLetters.Length; usedLetters[letterIndex] = letterGuessed; return usedLetters; }
我认为有几件事可能正在发生。
- 当我尝试在第一次运行时获得
usedLetters
的长度时,空数组会不返回零,而是返回null。繁荣。界外。 - 传递用26定义的空白数组有一些问题成员……?但我不确定这个问题会是什么,所以我不知道谷歌会产生相关的结果。
- 我可能有一个范围问题;我找到了一个类似的链接问题的Java,虽然使用
for
循环。我不太明白Java用户想要的东西,但是有些问题听起来熟悉。
我需要另一双眼睛来看待这个问题,并为我指出解决这个问题的正确方向。
根据c#规范:(强调我的)
1.8数组类型是引用类型,数组变量的声明只是为数组实例的引用留出空间。实际数组实例是在运行时使用new操作符动态创建的。new操作指定新数组实例的长度,然后在实例的生命周期内固定该长度。数组元素的下标取值范围为0到Length - 1。 new操作符自动将数组元素初始化为它们的默认值,例如,对于所有数值类型,该值为零,对于所有引用类型,该值为空。
将char数据类型默认为''0'的默认值
看起来您想要List<char>
可以增长(与Add
)方法。
数组有固定的大小,下面的代码(你在示例中有)将总是抛出超出范围的异常,因为你访问的元素在数组的最后一个元素之前。
usedLetters[usedLetters.Length] = 'c';
关于数组长度的详细信息:
// newArray - array of 0 chars. newArray.Length is 0
var newArray = new char[0];
// nullArray not created, nullArray.Length will throw NullReferenceExcetption
char[] nullArray = null;
// defaultArray = array of 26 characters, each value 0.
// defaultArray.Length is 26;
char[] defaultArray = new char[26];
当你定义一个新的数组,但不手动初始化其中的项,它将自动初始化为数组包含的任何类型的默认值。在本例中,您要创建一个字符数组。字符的默认值是''0',或空字符。
这意味着数组永远不是真正的"空"。如果你定义了一个有26个槽的数组,它将始终保持这个长度,除非你创建了一个新的数组。