2016-09-29 4 views
0

작은 서언, 저는 프로 프로그래머가 아닙니다. 저는 실제로 일부 프로그래밍을 알고있는 기계 엔지니어입니다. 여기는 제 첫 번째 질문이기 때문에 나와 함께하시기 바랍니다. 나는 일을 단순하게 유지하기 위해 실제 코드 대신에 대략적인 요약 코드를 넣는 것과 비슷합니다.왜 내 지그재그 배열로 문제가 해결 되었습니까?

vb.net에 지그재그 배열이 있습니다. 특정 화합물이 지그재그 배열의 첫 번째 인덱스 인 각 "영역"을 얼마나 많이 통과하는지 추적하는 데 사용하고 있습니다. 예,

jagged_arr()() = new double(4)() {} 

과 배열의 첫 번째는 항상 사전에 설정됩니다 : 그래서 나중에

jagged_arr(0) = {1, 2, 3, 4} 

내가 통해 반복하기 위해 노력하고있어 및 프로세스 것을 나는 이미와 다른 배열을 초기화했습니다 기본적으로 영역별로 영역에 :

for z = 0 to 3 
    if z = 2 
    jagged_arr(z + 1) = jagged_arr(z) 'NOTE!!! 

    for r = 0 to jagged_arr(z + 1).getUpperBound(0) 
     'more calcs 
     jagged_arr(z + 1)(r) += 2 
    next 
    end if 
next 

대신 나에게 배열을주는 내가 기대 :

,518,984,451,755,339,203,210

나는 배열과 같이 얻을 :

{{3, 2, 3, 4}, 
{3, 2, 3, 4}, 
{3, 4, 5, 6}, 
{3, 4, 5, 6}, 
{3, 4, 5, 6}} 

내가 그 일이 왜 꽤 혼란 스러워요.

jagged_array(z + 1) = new double(jagged_array(z).getUpperBound(0)) {} 
for i = 0 to jagged_array(z + 1).getUpperBound(0) 
    jagged_array(z + 1)(i) = jagged_array(z)(i) 
next 

내가 여기서 뭔가를 놓치고 있습니까 :이와 내가 선이 위에서 언급 교체 후 의도 한대로 (참고로!) 일을 왜 더 혼란 스러워요? 각 배열을 처음에 복사하는 것이 왜 이상한 행동을 일으키는 지 알 수 없습니다. 어떤 도움을 주셔서 감사합니다!

+0

배열은 값 유형이 아닌 .NET에서 참조 유형입니다. 배열을 복사하지 않고 참조를 *** 동일한 *** 배열에 복사하고 있습니다. – Comintern

답변

0

변경 사항이 첫 번째 코드에서 발생하면 "하위 배열"을 "다른 장소"에 지정하는 경우 어떻게됩니까?
이렇게하면 해당 배열에 대한 참조를 할당하면 jagged_array(z + 1)jagged_array(z)은 이제 같은 하위 배열을 나타냅니다.
또 다른 방법은 두 가지 모두를 액세스하는 별칭이되기 때문에 하나를 통해 수행 한 수정은 과 동일한 것을 참조하기 때문에 다른 개체가 액세스 한 개체에 반영됩니다.

당신은 (그것을 위해 Array.Copy이 주) 결과적으로는 동일한 참조하지 않는 당신이 새로운 오브젝트 (새 배열을) 만드는 일을 코드를 변경하고 로 초기 콘텐츠를 복사

하나의 말을 통해 수정을 의미하는 객체 jagged_array(z + 1) 참조하는 객체를 변경하지 마십시오 jagged_array(z)

+0

그럴 경우 내 결과가 더 이상 일치하지 않는 이유는 무엇입니까? {3, 4, 5, 6}, {3, 4, 5,6}, {3, 4, 5, {3, 4, 5, 6}, {3, 4, 5, 6}} ? – padleyj