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