2017-08-05 80 views
0

這是我對3x3矩陣的次要實現。 問題是,對於一些奇怪的原因j未達到2,任何想法爲什麼會發生這種情況?迭代時出錯

//return the minor of a 3x3 matrix 
int matrix::minor(int element) const { 
    std::vector <int> list; 
    if (rows == columns) { 
     int result = 0, a = 0, b = 0; 
     for (int i = 1; i < rows; i++) { 
      for (int j = 0; j < columns && j != element; j++) { 
       std::cout << "Adding element " << array[i][j] << std::endl; 
       list.push_back(array[i][j]); 
      } 
     } 
     std::cout << std::endl; 
     a = list[0] * list[3]; 
     b = list[1] * list[2]; 
     result = a - b; 
     return result; 
    } 
    else { 
     std::cout << "Not a square matrix" << std::endl; 
     return 0; 
    } 
} 
我不使用第一行,因爲它是在樞軸

element是第一行中的樞紐地位。

+1

'J 1 = element'條件可能是假的,讓你的程序跳出內'for'循環的前'j'達到2 – nglee

+0

不過,我覺得它會遍歷到下一個號碼,不退出整個'爲'我該如何解決這個問題? –

+0

@RenatoA。如果那是真的,你會如何退出'for'循環? –

回答

0

j等於element時,您的邏輯打破循環而不是忽略j的迭代。

假設element的值可以是0,1,或2,你的邏輯需要是:

for (int i = 0; i < rows; i++) { // Note the change to the initial value of i 
     for (int j = 0; j < columns; j++) { 
      if (j != element) 
      { 
       std::cout << "Adding element " << array[i][j] << std::endl; 
       list.push_back(array[i][j]); 
      } 
     } 
    } 

在評論,你說:

沒了的值我必須是1,因爲我跳第一排

這很公平。但是,我會更改minor以不承擔1。提供行和列索引以計算等級。

int matrix::minor(int irank, int jrank) const 
{ 
    std::vector <int> list; 
    if (rows == columns) 
    { 
     int result = 0, a = 0, b = 0; 
     for (int i = 0; i < rows; i++) 
     { 
     if (i != irank) 
     { 
      for (int j = 0; j < columns; j++) 
      { 
       if (j != jrank) 
       { 
        std::cout << "Adding element " << array[i][j] << std::endl; 
        list.push_back(array[i][j]); 
       } 
      } 
     } 
     } 

     std::cout << std::endl; 
     a = list[0] * list[3]; 
     b = list[1] * list[2]; 
     result = a - b; 
     return result; 
    } 
    else 
    { 
     std::cout << "Not a square matrix" << std::endl; 
     return 0; 
    } 
} 
+0

我不敢相信sh * ty'for'突破沒有,我花了太多的時間在高級編程語言現在我再次努力與C++謝謝 –

+0

nope我的價值必須是1因爲我跳第一行 –