C_Sharp 板


LINE

※ 引述《rahim (forget it)》之铭言: : ※ 引述《rahim (forget it)》之铭言: : : System.Collections.Generic里面的类别 : :       跟ArrayList比较接近的 是List泛型类别吗? : : http://msdn2.microsoft.com/zh-tw/library/6sh2ey19(VS.80).aspx     : 如果想要依照使用者输入的要求 : 建立一个m X n的动态阵列  :        那下面这样写可以吗? : Console.WriteLine("Please input the row size of matrix"); : int m =Convert.ToInt32(Console.ReadLine()); : Console.WriteLine("Please input the column size of matrix"); : int n = Convert.ToInt32(Console.ReadLine()); : List<List<double>> arr = new List<List<double>>(); : for (int i = 0; i < m; i++) : { : arr[i] = new List<double>(); : for (int j = 0; j < n; j++) : { : arr[i][j] = i + j; : } : }  这样不行 观念还不是很清楚
1F:推 tomex:看起来ok 03/24 00:59
2F:推 tomex:不过list<>要用add()把值塞进去,未配大小时就充值不行 03/24 01:01
3F:推 rahim:所以是改成arr.Add(new List<double>()); 03/24 04:02
4F:→ rahim:下面改成arr[i].Add(i+j); 这样以後就可以用arr[i][j]了吗? 03/24 04:03
5F:→ rahim:还有想请问一下List< >中间要放的是什麽? 03/24 04:04
6F:→ rahim:为什麽我一开始用 03/24 04:05
7F:→ rahim:List<List<double>> arr=new List<List<double>>(); 03/24 04:06
8F:→ rahim:这样可以呢?(虽然是我自己想出来的,不过想听一下讲解) 03/24 04:07
as tomex say 这种资料结构都要先Add()东西之後你才能去作给值得动作 List<List<double>> arr = new List<List<double>>(); 这句话代表arr这个List里放的是另一个List < >里头就是这个大箱子里头的型别的意思 而里头的那个List<double>代表这个List里面放的是double 跟ArrayList最大的不同点在於 ArrayList无论你丢什麽东西进去他都先帮你转成object 所以你要取值的时候也只能拿到object 造成你必须要先强制Cast成你需要的资料型别後才能使用 eg. ArrayList myarr = new ArrayList(); myarr.Add(1); int a = (Int32)myarr[0]; 所以List<>效率好 (先规定好要放什麽资料就不需要去作Object型别的转换) 但是ArrayList弹性高 (你可以乱放任何不同种类的东西进去,只要你取用的时候Cast成你想要的东西就可以) 而当你作 arr.Add(new List<double>()); 这个动作时 就代表将arr放进一个新的 List<double> 这时候arr[0]才确实存在在这个arr里 你若是还没有Add就去作 arr[0] = new List<double>(); 这里的 "=" 有给值或是Modify的意思 你还没给他东西的实体你怎麽去modify他或是给值呢? 当然会有错误 就像有人命令你 将Arr第0号箱子里的红苹果涂成绿色 你这样Arr[0] = "green" 这样一定错 苹果都还没放进去怎麽上色 你当然得先 Arr.Add(new Apple("red")); 才能去作 Arr[0] = "green"; 这样去想就对了 所以你的程式应该这样写 List<List<double>> arr = new List<List<double>>(); for (int i = 0; i < m; i++) { //arr[i] = new List<double>();错误 arr[i].Add (new List<double>()); //正确 for (int j = 0; j < n; j++) { //arr[i][j] = i + j;错误 arr[i].Add(i+j); 正确 ps. 其实以上这一行arr[i].Add(i+j)就等於以下两行 arr[i].Add(new double()); arr[i][j] = i + j; //不过你要注意 //你的List里头是double //但是i+j是int //系统这里不会告知你 自己作转换 //这种型别匹配错误的问题要小心 //很多Bug就是在这种地方出来 } } 其实你可以自己多try try久就懂了 如果你用的是VisualStudio就可以自己去Compile看看 然後执行时下中断点让程式停住 然後去看区域变数里头的arr里头的值对不对 像这个程式你还可以去观察一下arr.Capacity这个属性 你会发现他一直在有规律的长大 摸熟了这个资料结构的运作方式跟细节 以後你用起来自然得心应手  我相信这些MSDN都有写吧 你可以深入研究一下 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.110.47 ※ 编辑: GreatShot 来自: 220.133.110.47 (03/24 05:34)
9F:推 rahim:想请问一下 为什麽arr.Add(new double())要用new呢? 03/24 10:46
10F:→ rahim:arr[i].Add()里面要装的 不是只有double吗? 03/24 10:47
11F:→ rahim:而double的型态不是物件 那为什麽要new double呢? 03/24 10:48
12F:→ rahim:另外谢谢你跟tomex大 你们让我学到很多!! 03/24 10:48
13F:推 GreatShot:其实不用这麽作 我只是举例给你看而已 03/24 10:53
14F:→ GreatShot:因为里头不一定放的是double 也许是你自订的物件 03/24 10:53
15F:→ GreatShot:至於double是不是物件请参阅2500 03/24 10:54
16F:推 rahim:谢谢 2500那篇讲得很清楚 03/24 11:06
17F:推 rahim:Add()括号中间可以直接给值 这样就等於做物件初始化 03/24 11:08
18F:→ rahim:如果不直接给值 double在C#也算是物件 所以要new double() 03/24 11:09
19F:推 deuter:Add(new double())和 Add(0)一样意思, 写 Add(0)就好了 03/24 13:54
20F:推 horngsh:其实也不用为了物件导向而去牵就OO的写法, 有时C式写法还 03/25 10:14
21F:推 horngsh:简洁的多. 03/25 10:16
22F:推 GreatShot:arr.Add(i+j)就好了 OO写法是让新手知道原理 03/25 10:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP