2014-09-14 1 views
-3

i (예 : 아웃터 루프)의 첫 번째 반복 중에 내부 루프를 통과하지 않는 이유를 아는 사람이 있습니까?서명 된 v.s.가 포함 된 중첩 루프 부호없는 정수

체격 : 코드

template <class T> 
Matrix<T> LinearEquations<T>::backSubstitution(Matrix<T>& a, Matrix<T>& b){ 

    Matrix<T> s(b); 
    for(signed i = a.getRows()-1; i > -1; --i){ 
     //cout << "Debug: i = " << i << endl; 
     //if(i == a.getRows()-1) continue; 
     for(unsigned j = i+1; j < a.getRows(); ++j){ 
      //cout << "Debug: i = " << i << ", j = " << j << endl; 
      s(i, 0) = s(i, 0) - (a(i, j) * s(j, 0)); 
     } 
     //cout << "Debug: Hello world" << endl; 
     s(i, 0) = s(i, 0)/a(i, i); 
     //cout << "Debug: i = " << i << endl; 
     //cout << "Debug: Hello world" << endl; 
    } 
    return s; 
} 
+0

'a.getRows() '에 의해 반환되는 타입과 값은 무엇입니까 –

+0

내부 루프 조건이 외부 루프 처음으로 만족되지 않습니다. – Arpit

+0

디버거를 사용해 보셨습니까, 아니면 비교하고있는 변수의 값을 출력 해 보셨습니까? – Yakk

답변

2

고려 : 아마도 그것은 signed iunsigned j

코드 함께 할 수있는 뭔가가있을 것을 첫 번째 반복 동안

for(signed i = a.getRows()-1; i > -1; --i){ 
    for(unsigned j = i+1; j < a.getRows(); ++j){ 

ja.getRows()-1+1으로 설정하십시오. 분명히 a.getRows() < a.getRows()이 유지되지 않으므로 내부 루프의 본문이 실행되지 않습니다.

+0

톱 ... 고마워! 매우 감사! – Manaick

0

a.getRows()3을 반환한다고 가정 해 보겠습니다. 그런 다음 i2으로 시작합니다. 그런 다음 j3으로 시작합니다. 루프 for (j = 3; j < 3; ++j)은 테스트 조건이 초기에 거짓이므로 0 번을 실행합니다.

a.getRows() - 1signed int의 범위를 벗어나지 않는 한 유사한 로직이 다른 값에 적용됩니다.