回 帖 发 新 帖 刷新版面

主题:数组的一个菜鸟级问题

小弟新学C#,有个初级问题,恳请高手大大们指点迷津: 
       int[,] MyArray={{1,2,3},{4,5,6}};
        //int[,,] MyArray={{1,2,3,},{4,5,6},{7,8,9}};
        Console.WriteLine("取得MyArray维数一的长度,MyArray.GetLength(0)={0}",MyArray.GetLength(0));
        Console.WriteLine("取得MyArray维数二的长度,MyArray.GetLength(1)={0}",MyArray.GetLength(1));
        return 0;

如上代码,第一个int可以正常执行,但是第二个在用CSC编译的时候提示错误为:
无效的秩说明符:应为“,”或“]”
//后面的:
int[,,] MyArray={{1,2,3,},{4,5,6},{7,8,9}};
这句该怎么写呢?
另外,有没有肯指点一二的高手,偶拜个师,愿意的留个Q,多谢多谢。。。

回复列表 (共12个回复)

沙发


怎么没人回复一个呢?
难道嫌这个问题太菜了,都不屑回答吗?

板凳


      int[,] MyArray={1,2,3},{4,5,6};
        //int[,,] MyArray={{1,2,3,},{4,5,6},{7,8,9}};
        Console.WriteLine("取得MyArray维数一的长度,MyArray.GetLength(0)={0}",MyArray.GetLength(0));
        Console.WriteLine("取得MyArray维数二的长度,MyArray.GetLength(1)={0}",MyArray.GetLength(1));
        return 0;

应为:int[,] MyArray=[1,2,3],[4,5,6];
      int[,,] MyArray=[1,2,3,],[4,5,6],[7,8,9];

3 楼


此外:int[,] MyArray=[1,2,3],[4,5,6]; //此为二维数组
      int[,,] MyArray=[1,2,3,],[4,5,6],[7,8,9];//此为三维数组
LZ还是没搞清楚数组啊

4 楼

各位大佬,小弟一看到你们的答复,就禁不住万分激动,连忙去测试了一番,可是结果还是不行啊。
int[,] MyArray=[1,2,3],[4,5,6];
这里的{}改为[]后,csc编译器提示[错误。
int[,,] MyArray=[1,2,3,],[4,5,6],[7,8,9];
这里当然也一样。

5 楼

int[, ,] MyArray ={ { { 1, 2, 3 } }, { { 4, 5, 6 } }, { { 7, 8, 9 } } };

6 楼

非常感谢南月大哥的指点,按照你的方法,我修改代码后顺利的编译通过并运行程序。得到的结果是:
取得MyArray维数一的长度,MyArray.GetLength(1)=3
取得MyArray维数二的长度,MyArray.GetLength(1)=1

再次的疑问,如果在int[,] MyArray={{1,2,3},{4,5,6}};这行的时候运行程序得到:
取得MyArray维数一的长度,MyArray.GetLength(1)=2
取得MyArray维数二的长度,MyArray.GetLength(1)=3

那么在int[, ,] MyArray ={ { { 1, 2, 3 } }, { { 4, 5, 6 } }, { { 7, 8, 9 } } };这个时候运行结果的3和1,又是什么意思呢?

7 楼

是数组指定维数的长度。
int[,,] MyArray={{1,2,3,},{4,5,6}};这时内存中可以这样表示你这个二维数组
1 2 3
4 5 6
你可以把它看成是一个班级,有两排,每排3人,每人编上号就是
MyArray[0,0] MyArray[0,1] MyArray[0,2]
MyArray[1,0] MyArray[1,1] MyArray[1,2]
所以这个数组的第一维长度是2第二维长度都是3
如果是这样
int[,,] MyArray={{1,2,3,},{4,5,6},{7,8,9}};
编号后就是
MyArray[0,0] MyArray[0,1] MyArray[0,2]
MyArray[1,0] MyArray[1,1] MyArray[1,2]
MyArray[2,0] MyArray[2,1] MyArray[2,2]
那两个维度长度都是3

对于三维数组
int[, ,] MyArray ={ { { 1, 2, 3 } }, { { 4, 5, 6 } }, { { 7, 8, 9 } } };
你可以把它看成是一个年级,这个年级有三个班,每班有只有一排,每排有3人
 0班
1 2 3

 1班
4 5 6

 2班
7 8 9
编上号就是
MyArray[0,0,0] MyArray[0,0,1] MyArray[0,0,2]
MyArray[1,0,0] MyArray[1,0,1] MyArray[1,0,2]
MyArray[2,0,0] MyArray[2,0,1] MyArray[2,0,2]
班级数就是第一维 排数是第二维的长度, 人数是第三维长度

如果改成这样
 int[, ,] MyArray ={ { { 1, 2, 3 }, { 1, 2, 3 } }, { { 4, 5, 6 }, { 1, 2, 3 } }, { { 7, 8, 9 }, { 

1, 2, 3 } } };
内存中就可以这样理解了。

  1  2  3
  1  2  3

  4  5  6
  1  2  3

  7  8  9
  1  2  3
那么它的三个维度分别是多少呢?
3 2 3

不知道说得对不对,自己参考一下吧

8 楼

多谢你的解答,其他的都明白。可是还是不明白int[,,] MyArray={{1,2,3,},{4,5,6},{7,8,9}};这个执行结果,如果是取得MyArray维数一的长度,MyArray.GetLength(1)=3。还可以理解,但是“取得MyArray维数二的长度,MyArray.GetLength(1)=1”是什么呢?

9 楼

还有:

using System;
namespace COM.HR
{
  class Employee
  {
    public Employee()
    {
      Init("001",10000);
    }
    public Employee(string EmpID,double BaseSalary)
    {
      Init(EmpID,BaseSalary);
    }
    private void Init(string EmpID,double BaseSalary)
    {
      mstrEmpID=EmpID;
      mdblBaseSalary=BaseSalary;
    }
    public string GetEmpID()
    {
      return mstrEmpID;
    }
    public double GetBaseSalary()
    {
      return mdblBaseSalary;
    }
    private string mstrEmpID="";
    private double mdblBaseSalary=0;
  }
  class Human
  {
    public static int Main()
    {
      Employee e1=new Employee();                   
      Console.WriteLine("员工e1:代号={0},基本薪水={2}",e1.GetEmpID(),e1.GetBaseSalary());
      return 0;
    }
  }
}
可以编译通过,但执行后错误如下:
未处理的异常:  System.FormatException: 索引(从零开始)必须大于或等于零,且小于参
数列表的大小。
   在 System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String fo
rmat, Object[] args)
   在 System.String.Format(IFormatProvider provider, String format, Object[] arg
s)
   在 System.IO.TextWriter.WriteLine(String format, Object arg0, Object arg1)
   在 System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0,
Object arg1)
   在 COM.HR.Human.Main()

请问是怎么回事呢?

10 楼

不好意思,上面这个我自己发现问题了。原来是:员工e1:代号={0},基本薪水={2}这里的{2}错了

我来回复

您尚未登录,请登录后再回复。点此登录或注册