java 板


LINE

新手一枚,想请问一下板上的前辈问题 在练习程式的时候发现,若是将自行定义的类别物件传入方法中时 似乎在方法中所做的修改没有办法对传入的物件造成改变 想请问一下为什麽造成这种情形跟如何修改 谢谢大家 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.135.18
1F:推 qrtt1:一定是你误解了什麽,贴个 code 上来吧。 08/20 22:05
那这样会是个有点长的故事  囧 在书上看过有题目写 private static Distance newDistance(Distance a){ a = new Distance(a.getD() - 1); return a; } 然後书中的答案是里面对a作的修改不会影响传进来的a 之前查网路有看到物件在方法中的调用不会对引用造成影响的解释,而我也这样接受 不过今天练习写BubbleSort跟QuickSort时写出来的结果让我感到有点疑惑 class sorting { public static void BubbleSort(ICanCompare[] objs){ for(int i = objs.length - 1; i > 0; i--) for(int j = 0; j < i; j++){ if(objs[j].Compare(objs[j+1]) > 0){ ICanCompare temp = objs[j]; objs[j] = objs[j+1]; objs[j+1] = temp; } } } //QuickSort part comtents two scope public static void QuickSort(ICanCompare[] objs){ int i = objs.length -1; QuickSortWork(objs , 0, i); } private static void QuickSortWork(ICanCompare[] objs, int left, int right){ if(objs.length > 2){ ICanCompare pivot = objs[right]; int i = left - 1; int j = right; ShortLoop : for(;;){ while(objs[++i].Compare(pivot) > 0) while(objs[--j].Compare(pivot) < 0) if(i < j){ ICanCompare temp = objs[i]; objs[i] = objs[j]; objs[j] = temp; } else break ShortLoop; } ICanCompare temp = pivot; pivot = objs[i]; objs[i] = temp; QuickSortWork(objs, left, i - 1); QuickSortWork(objs, i + 1, right); } } } BubbleSort能成功的排序,但是自己写的QuickSort却会出现ArrayIndexOutOfBounds- Exception,所以我在怀疑是不是传进来的物件的问题 此外,原本还有写传进去物件的swap的方法 但是在无法交换成功之後就直接把程式码丢到每个要交换的地方 而这点也让我觉有点困惑,到底传进去的物件会不会被改到 所以想要发问物件在方法中的修改情形会是怎样 ※ 编辑: vencil 来自: 140.119.135.18 (08/20 22:19)
2F:推 peicachu:是QuickSortWork(objs, left, i - 1)出问题? 08/20 23:06
3F:→ peicachu:第一轮的left=0, i=-1, 所以(0,-2) OutOfBounds 08/20 23:08
4F:→ peicachu:回圈内的i跟method内的i混在一起使用 08/20 23:14
5F:→ peicachu:如果第一次交换的左原素就是objs[0].... 08/20 23:19
6F:→ peicachu:元素交换完,指标还是指着那个位置 08/20 23:20
7F:→ vencil:跟指标没有关系吧@@  我的确只是想要交换元素的内容 08/20 23:34
※ 编辑: vencil 来自: 140.119.135.18 (08/20 23:40)
8F:推 szss8765:看出来了= ="int i = left - 1; 你看看你的LEFT是多少? 08/21 00:39
9F:→ vencil:那个没有问题吧 下面刚开始的++i马上就让他回到0了不是吗 08/21 06:40
10F:→ adrianshum:开debugger看是哪一句throw ex, 和当时各var 的状态吧 08/21 10:47
11F:→ sbrhsieh:while(objs[++i].Compare(pivot) > 0); 08/21 11:31
12F:→ sbrhsieh:while(objs[--j].Compare(pivot) < 0); 08/21 11:33
13F:→ sbrhsieh:有无 ; 在语意上差很多 08/21 11:49
14F:→ adrianshum:逼自己在所有 if/while/for etc 都加上{} 就清楚多了 08/21 12:02
15F:→ vencil:前面几楼的说法我有确认过 不是那种的语法问题@@ 08/21 12:17
16F:→ vencil:还有我也想问提出来的修改物件的问题 希望有人帮忙解惑 08/21 12:20
17F:→ adrianshum:那你开 debugger trace 过没有? 这种问题该很容易trace 08/21 12:27
请问debugger指的是javac的编译问题说明吗 如果是的我就贴一下他给的讯息 依序分别是 while(objs[++i].Compare(pivot) > 0) QuickSortWork(objs , 0, i); 发生问题  因为她第一个给的是Compare那行  所以有在想说是不是物件没改到 ※ 编辑: vencil 来自: 140.119.135.18 (08/21 12:48)
18F:→ adrianshum:啥? 是连 compile 也不能过?! 08/21 14:40
19F:→ sbrhsieh:如果你觉得你写的完全正确就不需要来问了..... 08/21 14:48
20F:→ sbrhsieh:明明就是你的演算法实做有误...别人提点你都不听... 08/21 14:49
21F:→ sbrhsieh:http://tinyurl.com/nyrwn9 08/21 14:55
22F:→ adrianshum:顺便一提... coding style 请跟 java 一般的比较好... 08/21 15:10







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灯, 水草

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

TOP