主题:数组的一个菜鸟级问题
choubao
[专家分:0] 发布于 2009-03-16 00:13:00
小弟新学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个回复)
沙发
choubao [专家分:0] 发布于 2009-03-18 00:01:00
怎么没人回复一个呢?
难道嫌这个问题太菜了,都不屑回答吗?
板凳
minisea [专家分:0] 发布于 2009-03-19 16:42:00
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 楼
minisea [专家分:0] 发布于 2009-03-19 16:45:00
此外:int[,] MyArray=[1,2,3],[4,5,6]; //此为二维数组
int[,,] MyArray=[1,2,3,],[4,5,6],[7,8,9];//此为三维数组
LZ还是没搞清楚数组啊
4 楼
choubao [专家分:0] 发布于 2009-03-21 21:20:00
各位大佬,小弟一看到你们的答复,就禁不住万分激动,连忙去测试了一番,可是结果还是不行啊。
int[,] MyArray=[1,2,3],[4,5,6];
这里的{}改为[]后,csc编译器提示[错误。
int[,,] MyArray=[1,2,3,],[4,5,6],[7,8,9];
这里当然也一样。
5 楼
南月 [专家分:590] 发布于 2009-03-24 20:38:00
int[, ,] MyArray ={ { { 1, 2, 3 } }, { { 4, 5, 6 } }, { { 7, 8, 9 } } };
6 楼
choubao [专家分:0] 发布于 2009-03-26 03:10:00
非常感谢南月大哥的指点,按照你的方法,我修改代码后顺利的编译通过并运行程序。得到的结果是:
取得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 楼
南月 [专家分:590] 发布于 2009-03-26 12:56:00
是数组指定维数的长度。
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 楼
choubao [专家分:0] 发布于 2009-03-26 22:16:00
多谢你的解答,其他的都明白。可是还是不明白int[,,] MyArray={{1,2,3,},{4,5,6},{7,8,9}};这个执行结果,如果是取得MyArray维数一的长度,MyArray.GetLength(1)=3。还可以理解,但是“取得MyArray维数二的长度,MyArray.GetLength(1)=1”是什么呢?
9 楼
choubao [专家分:0] 发布于 2009-03-26 22:34:00
还有:
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 楼
choubao [专家分:0] 发布于 2009-03-26 22:38:00
不好意思,上面这个我自己发现问题了。原来是:员工e1:代号={0},基本薪水={2}这里的{2}错了
我来回复