我正在研究一个函数来转置存储在NxN
s数组中的float
矩阵。我的第一个实现似乎导致函数无限循环,我似乎不明白为什么。这是原始代码:
for(int i = 0; i < numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1; i++)
{
for(int j = i + 1; j < numColumns; j++)
{
//Swap [i,j]th element with [j,i]th element
}
}
但是函数永远不会返回。由于看不到逻辑中的错误,我重新表述了表达式,现在有了以下工作代码:
int middleRow = numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1;
for(int i = 0; i < middleRow; i++)
{
for(int j = i + 1; j < numColumns; j++)
{
//Swap [i,j]th element with [j,i]th element
}
}
有谁能解释一下为什么第一个版本不起作用,而第二个版本却起作用?
最佳答案
根据operator precedence表,<
的优先级高于?:
。您需要根据需要显式使用()
来强制执行所需的优先级。
变化
for(int i = 0; i < numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1; i++)
到
for(int i = 0; i < ( numRows % 2 == 0 ? numRows / 2 : numRows / 2 + 1) ; i++)
注意:请使用第二种方法。在可读性、维护性和理解性方面都要好得多。