简单的C#错误

时间:2017-01-04 17:00:38

标签: c#

这是我的代码:

namespace ConsoleApplication3
{
  class Module1
  {
    static void Main()
    {
            int i;
            int j;
            int[,] matriceFoglio;
            string stringa = "";

            for (i = 1; (i <= 11); i++)
            {
                stringa = "";

                for (j = 1; (j <= 11); j++)
                {
                    matriceFoglio(i, j) = 0;
                    stringa = (stringa + matriceFoglio[i,j]);
                }

                Console.WriteLine(stringa);
            }

            Console.ReadLine();
            //  disegno l'albero di natale
            matriceFoglio[1, 5] = 1;
            matriceFoglio[2, 4] = 1;
            matriceFoglio[2, 5] = 1;
            matriceFoglio[2, 6] = 1;
            matriceFoglio[3, 3] = 1;
            matriceFoglio[3, 4] = 1;
            matriceFoglio[3, 5] = 1;
            matriceFoglio[3, 6] = 1;
            matriceFoglio[3, 7] = 1;
            matriceFoglio[4, 5] = 1;
            matriceFoglio[5, 5] = 1;

            //  disegno l'albero
            Console.WriteLine("");

            for (i = 1; (i <= 11); i++)
            {
                stringa = "";

                for (j = 1; (j <= 11); j++)
                {
                    stringa = (stringa + matriceFoglio[i, j]);
                }

                Console.WriteLine(stringa);
            }

            Console.ReadLine();
    }
  }
}

在for循环中,编译器抛出此错误:

  

预期的方法名称和使用未分配的本地变量&#39; matriceFoglio&#39;。

我不明白我做错了什么。

3 个答案:

答案 0 :(得分:2)

我知道其他人已经指出了这一点,但只是在这里添加一些东西。这里有两个错误,这两个错误几乎都是编译器所说的。第一:

matriceFoglio(i, j) = 0;

这不是正确的语法 - 这是方法调用的语法,而不是数组赋值。这就是编译器希望这是一个方法名称的原因。这应该是

matriceFoglio[i, j] = 0;

此外,int[,] matriceFoglio;在您使用时未初始化,因此编译器在此也绝对正确。你必须在使用它之前创建数组 - 你不能只是开始分配它。要理解为什么会这样,首先考虑如何实际实现数组:假设您要实现大小为10的数组。初始化数组时,运行时将在内存中“布局”10个连续位置并存储第一个位置项目。数组索引是初始地址的偏移量 - 这就是第一个项目是项目0的原因(没有偏移量,根据定义,第一个项目位于指针位置)。但是,如果要访问数组中的第五项,则其位置为(address of the first item) + (32 * 4)(假设为32位地址)。这就是为什么你可以进行恒定时间随机访问 - 找到任意位置只是指针算法。

答案 1 :(得分:1)

首先,您需要初始化数组(在此示例中大小为10x10):

int[,] matriceFoglio = new int[10, 10];

其次,使用方括号来访问数组而不是大括号:

// replace matriceFoglio(i, j) = 0; with
matriceFoglio[i, j] = 0;

<强>更新 我想,另一个错误与不正确的循环索引有关,基本上没有索引为11的元素(我假设数组大小为10x10)。它应该是:

for (i = 0; i < 10; i++)
{
    for (j = 0; j < 10; j++)
    {
    }
}

答案 2 :(得分:1)

您需要使用new:

初始化matriceFoglio
matriceFoglio = new int[10,10];

此外,当您为matriceFoglio指定值时,您需要使用方括号[]而不是括号,例如

matriceFoglio[i,j] = 0;