2014-03-05 3 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을 사용했다고 말했다. 그리고 그것을 "교활한 버그"라고 불렀습니다. 그러나 나는 그 문제를 보지 못했다. 그 함수를 호출하는 동안 매개 변수로 언급 한 값을 가져야하며 문제가 있어서는 안됩니다.

누구든지이 부분을 좀 알려 주시겠습니까?

답변

0

pq이 범위를 벗어나는 경우 코드에 나타나는 문제는 무엇입니까? 범위를 벗어나는 배열을 얻을 수 있습니다. p와 q가 배열의 길이 내에 있는지 먼저 확인해야합니다.

p 및 q를 사용하여 배열에 액세스하기 전에 먼저 배열을 확인해야합니다.

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

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

오케이. 하지만 p와 q가 배열 길이보다 작더라도'id [i] == id [p]'를 쓰면 내게 오류가 될까? –

+0

아니요. 적어도 나는 그것도 보지 않는다, 하아! – Coderchu

0

교활한 버그는 사용자가 볼 수 없지만 계속해서 문제가 발생합니다. 코드에서 반복이 i = p에 도달하면 id [p]의 값을 업데이트하고 다음 반복에서는 if 조건이 id [p]의 잘못된 값을 검사합니다. 당신은 그것이 교활하게 만드는 오류를 발견 할 수 없을 것입니다.