因为我不熟悉C语言,所以我尝试使用C语言中的第二个矩阵转置示例,将其转换为JavaScript(下面的代码)。它冻结了浏览器。为什么这个C代码在JavaScript中不起作用?
有人可以帮我理解可能导致问题的原因吗? C程序在ideone中运行良好。
正如Nirk指出的那样,C程序中的部分是整数而不是浮点数,所以循环没有终止,因为它应该不使用Math.floor
。
C代码:
#include <stdio.h>
void transpose(double *m, int w, int h)
{
int start, next, i;
double tmp;
for (start = 0; start <= w * h - 1; start++) {
next = start;
i = 0;
do { i++;
next = (next % h) * w + next/h;
} while (next > start);
if (next < start || i == 1) continue;
tmp = m[next = start];
do {
i = (next % h) * w + next/h;
m[next] = (i == start) ? tmp : m[i];
next = i;
} while (next > start);
}
}
JavaScript代码:
function transpose(m, w, h)
{
var start, next, i,
tmp
for (start = 0; start <= w * h - 1; start++) {
next = start
i = 0
do { i++
next = (next % h) * w + next/h
} while (next > start)
if (next < start || i == 1) continue
tmp = m[next = start]
do {
i = (next % h) * w + next/h
m[next] = (i == start) ? tmp : m[i]
next = i
} while (next > start)
}
}
function main()
{
var j
var m = []
for (j = 0; j < 15; j++) m[j] = j + 1
console.log("before transpose:")
console.log(m)
transpose(m, 3, 5)
console.log("\nafter transpose:")
console.log(m)
}
main()
任何调试语句它愣什么时候告诉我们或值的可疑变量了? – CBIII
肯定 - 它在'转置'功能期间冻结... –
所以,可能不是你的问题的直接来源,但你应该阅读JS的reccomended代码风格。它最好使用分号,并打开大括号('{')inline。 –