新实例化的数组的长度解析为0或null吗?

本文关键字:null 数组 实例化 | 更新日期: 2023-09-27 18:08:51

作业:我在下面的代码中获取和索引越界。这是一个绞刑游戏,我要记录我在char数组中猜出的字母。

下面是我做的假设:

  1. 在调用方法中,我有一个未填充的数组(char[] displayGuesses = new char[26];)作为char[] usedLetters参数传递给下面的方法。
  2. 猜字母的第一次迭代,数组将为空。
  3. 长度为0。
  4. 我用letterGuessed参数填充usedLetters[0]
  5. 下一次我猜,数组的长度将是1,所以usedLetters[1]得到填充…等等。

    public char[] trackUsedLetters(char letterGuessed, char[] usedLetters)
    {
        int letterIndex = usedLetters.Length;
        usedLetters[letterIndex] = letterGuessed;  
        return usedLetters;
    }
    

我认为有几件事可能正在发生。

  1. 当我尝试在第一次运行时获得usedLetters的长度时,空数组会不返回零,而是返回null。繁荣。界外。
  2. 传递用26定义的空白数组有一些问题成员……?但我不确定这个问题会是什么,所以我不知道谷歌会产生相关的结果。
  3. 我可能有一个范围问题;我找到了一个类似的链接问题的Java,虽然使用for循环。我不太明白Java用户想要的东西,但是有些问题听起来熟悉。

我需要另一双眼睛来看待这个问题,并为我指出解决这个问题的正确方向。

新实例化的数组的长度解析为0或null吗?

根据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个槽的数组,它将始终保持这个长度,除非你创建了一个新的数组。