【问题标题】:JavaScript matrix bounds are incorrectJavaScript 矩阵边界不正确
【发布时间】:2013-09-22 22:09:25
【问题描述】:

我需要编写一个函数来返回一个生成二维数组的函数。函数 mult(x,y) 应该返回一个生成乘法表的函数,调用 generate_matrix() 应该返回矩阵。

    function mult(x,y){
            function generate_matrix(){
                var matrix = new Array(x);
                for(var k = 0; k < x+1; k++){
                    matrix[k] = new Array(y);
                }
                for(var i = 0; i < x+1; i++){
                    for(var j = 0; j < y+1; j++){
                        matrix[i][j] = i*j;
                    }
                }
                return matrix;
            }
            return generate_matrix;
        }

由于某种原因,矩阵比应有的大 100 倍。例如,如果我设置 var matrix = mult(5,5),然后调用 matrix(),我会得到一个大小为 50x50 的数组,而不是大小为 5x5 的数组。

我设置var m = mult(2,2),然后调用m(),应该得到如下二维数组:

[[0,0,0],[0,1,2],[0,2,4]]

【问题讨论】:

  • 你的代码没有按照你说的做。
  • 我运行它时运行良好...
  • 给定的代码看起来是正确的。也许使用上下文中的某些东西导致了您描述的行为。
  • @Bergi 观察力好,这里首选new Array(x+1);但是new Array(x) 不会引起任何可观察到的问题,因为(除非我弄错了)像array[array.length] = value; 这样的赋值在javascript 中是合法的。
  • @nh0815 如果它被解释为一个字符串,那是因为它一个字符串。如果您从 DOM 中获取值(如输入字段值),它们是 always 字符串,您必须显式地将它们强制转换为整数。 JavaScript + 运算符偏向于字符串连接 (!)。

标签: javascript arrays matrix


【解决方案1】:

请试试这个,我想这就是你想要的。

您可以在以下链接上进行测试:http://jsfiddle.net/BhaveshKachhadiya/Wt5gQ/33/

function mult(x, y) {
            var matrix = new Array(x);
            for (var k = 0; k < x + 1; k++) {
                matrix[k] = new Array(y);
            }
            for (var i = 0; i < x + 1; i++) {
                document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + "[";
                for (var j = 0; j < y + 1; j++) {
                    matrix[i][j] = i * j;
                    document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + matrix[i][j] + ",";
                }
                document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + "]" + "<br/>"
            }
            alert(matrix);
            return matrix;
        }

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多