我正在研究一个函数来转置存储在NxNs数组中的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++)

注意:请使用第二种方法。在可读性、维护性和理解性方面都要好得多。

09-28 04:18