2014-03-05 25 views
0

我一直在編寫一個用於數組內部重複的java代碼。 下面是代碼:在函數內部使用參數變量

private int[] id; 
public void union(int p, int q) 
{ 
    int pid = id[p]; 
    int qid = id[q]; 
    for(int i=0; i<id.length; i++) 
     if(id[i]==pid)id[i]=qid; 
} 

但我的導遊說,有我用id[i]==id[p]代替id[i]==pid它將給我一個錯誤。並繼續稱它爲一個「陰險的bug」。但我沒有看到它的問題。它應該給出與我調用該函數時相同的結果,它應該將我提到的值作爲參數,並且應該沒有問題。

有人對此有所瞭解嗎?

回答

0

我在代碼中看到的問題是如果pq超出範圍?你會得到一個數組越界例外。你應該首先檢查p和q是否在數組的長度內。

在嘗試使用p和q訪問數組之前,應該先嚐試檢查它們。

if(p >= 0 && p < id.length) 

if(q >= 0 && q < id.length) 
+0

OKAY。但我擔心的是,即使p和q小於我的數組長度,也會使用'id [i] == id [p]'給我一個錯誤? –

+0

不,它不會。至少我看不到它,哈! – Coderchu

0

一個陰險的bug在用戶端看不到,但它會繼續從內部引起問題。在你的代碼中,當迭代達到i = p時,它將更新id [p]的值,並且在下一次迭代時if條件將檢查id [p]的錯誤值。您將無法檢測到造成隱患的錯誤。