迭代时出错

时间:2017-08-05 04:14:43

标签: c++

这是我对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 个答案:

答案 0 :(得分:0)

j等于j时,您的逻辑会打破循环,而不是忽略element的迭代。

假设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]);
            }
        }
    }

在评论中,你说:

  

nope i的值必须为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;
   }
}