[問題]傳入物件的修改方式
新手一枚,想請問一下板上的前輩問題
在練習程式的時候發現,若是將自行定義的類別物件傳入方法中時
似乎在方法中所做的修改沒有辦法對傳入的物件造成改變
想請問一下為什麼造成這種情形跟如何修改
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.119.135.18
推
08/20 22:05, , 1F
08/20 22:05, 1F
那這樣會是個有點長的故事 囧
在書上看過有題目寫
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)
推
08/20 23:06, , 2F
08/20 23:06, 2F
→
08/20 23:08, , 3F
08/20 23:08, 3F
→
08/20 23:14, , 4F
08/20 23:14, 4F
→
08/20 23:19, , 5F
08/20 23:19, 5F
→
08/20 23:20, , 6F
08/20 23:20, 6F
→
08/20 23:34, , 7F
08/20 23:34, 7F
※ 編輯: vencil 來自: 140.119.135.18 (08/20 23:40)
推
08/21 00:39, , 8F
08/21 00:39, 8F
→
08/21 06:40, , 9F
08/21 06:40, 9F
→
08/21 10:47, , 10F
08/21 10:47, 10F
→
08/21 11:31, , 11F
08/21 11:31, 11F
→
08/21 11:33, , 12F
08/21 11:33, 12F
→
08/21 11:49, , 13F
08/21 11:49, 13F
→
08/21 12:02, , 14F
08/21 12:02, 14F
→
08/21 12:17, , 15F
08/21 12:17, 15F
→
08/21 12:20, , 16F
08/21 12:20, 16F
→
08/21 12:27, , 17F
08/21 12:27, 17F
請問debugger指的是javac的編譯問題說明嗎
如果是的我就貼一下他給的訊息
依序分別是
while(objs[++i].Compare(pivot) > 0)
QuickSortWork(objs , 0, i);
發生問題 因為她第一個給的是Compare那行 所以有在想說是不是物件沒改到
※ 編輯: vencil 來自: 140.119.135.18 (08/21 12:48)
→
08/21 14:40, , 18F
08/21 14:40, 18F
→
08/21 14:48, , 19F
08/21 14:48, 19F
→
08/21 14:49, , 20F
08/21 14:49, 20F
→
08/21 14:55, , 21F
08/21 14:55, 21F
→
08/21 15:10, , 22F
08/21 15:10, 22F
討論串 (同標題文章)