【问题标题】:JavaScript program crashes pageJavaScript 程序崩溃页面
【发布时间】:2015-12-22 07:58:04
【问题描述】:

我用 JavaScript 编写了一个简单的程序来查找 3X3 矩阵的辅因子矩阵。但是,该程序反复使我的页面崩溃,并且我在程序中找不到任何逻辑错误。这是我的代码:

var matrixA = {
   a11:"",
   a12:"",
   a13:"",
   a21:"",
   a22:"",
   a23:"",
   a31:"",
   a32:"",
   a33:""
};

function determinant (given,order) {
if(order==3){
    var det = (given.a11*((given.a22*given.a33)-(given.a23*given.a32)))-
    (given.a21*((given.a12*given.a33)-(given.a13*given.a32)))+
    (given.a31*((given.a12*given.a23)-(given.a13*given.a22)));
}
else if(order==2){
    var det = (given.a11*given.a22)-(given.a21*given.a12);
}
return det;
}

function cofactors(given){
var multiplier;
var temp = {
    a11:"",
    a12:"",
    a21:"",
    a22:""
};
var found_cofactor_matrix = {};
for (var i = 1; i <4; i++) {
    for (var j = 1; i < 4; j++) {
        if(((i+j)%2)==0){
            multiplier = 1;
        }
        else if(((i+j)%2)==1){
            multiplier = -1;
        }
        //Check whether row or column number is the same to make a 2X2 matrix
        for(var a = 1; a < 4; a++){
            for (var b = 0; b < 4; b++) {
                if((a==i)||(b==j)){

                } //do nothing
                else{
                    if(temp.a11==""){
                        temp.a11 = given["a"+a+b];
                    }
                    else if(temp.a12 == ""){
                        temp.a12 = given["a"+a+b];
                    }
                    else if(temp.a21 == ""){
                        temp.a21 = given["a"+a+b];
                    }
                    else if(temp.a22 == ""){
                        temp.a22 = given["a"+a+b];
                    }
                }
            };
        };
    found_cofactor_matrix["a"+i+j] = multiplier*determinant(temp,2);
    };
};
return found_cofactor_matrix;
}

这里,参数“given”是从函数调用的地方传给它的一个对象,是必须找到其辅因子的原始矩阵(matrixA)。我基本上首先创建一个 2X2 矩阵,找到它的行列式并根据需要将其与 1 或 -1 相乘。然后我将此值写入矩阵中的适当位置。

【问题讨论】:

    标签: javascript object math matrix


    【解决方案1】:

    for (var j = 1; i &lt; 4; j++) { 应该是for (var j = 1; j &lt; 4; j++) {

    【讨论】:

    • 哦,非常感谢。我真是太傻了。现在还有另一个问题,我登录到控制台的对象显示所有属性值都是 NaN。这可能是什么原因?
    【解决方案2】:

    删除 for 循环末尾的分号。并添加你的行列式函数。

    【讨论】:

    • 谢谢。我更新了 jsfiddle。 Update Fiddle
    • 我已经更新了你没有定义 var det 的行列式函数。在函数的顶部。在 cofactors 函数中调用时,您的行列式函数返回 NaN
    • 为什么它在 cofactors 函数中返回 NaN?
    • 因为循环问题!我已经更新了它,但仍然找不到你的 var i 没有增加的原因。
    • 现在它没有显示 NAN 但你的 var i 没有增加。
    【解决方案3】:

    您是否打开了控制台?在 Chrome 的控制台中运行此代码会产生 Uncaught ReferenceError: found_cofactor is not defined。您正在尝试定义未定义对象的 ["a"+i+j] 属性。应该是found_cofactor_matrix。 此外,determinant() 函数可能未定义(它不会出现在您的代码中)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2013-01-16
    • 2013-06-06
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多