如果声明未执行/到达

时间:2014-12-15 19:50:30

标签: javascript math if-statement web

下面的JavaScript代码试图通过使用毕达哥拉斯定理计算与直角三角形相关的值。我在检测在执行计算之前执行的各种输入组合的部件方面存在问题。它只是一系列if语句,它们都非常相似,但最后一个语句不会执行。

I made a fiddle,如果你们中的一些人想要乱用代码。

这是我遇到问题的功能:

function drawNumbers() {
    if(cathetusAKnown) {
        cathetusA.value = cathetusANumber;
    }

    if(cathetusBKnown) {
        cathetusB.value = cathetusBNumber;
    }

    if(hypotenuseKnown) {
        hypotenuse.value = hypotenuseNumber;
    }

    if(angleAKnown) {
        angleA.value = angleANumber;
    }

    if(angleBKnown) {
        angleB.value = angleBNumber;
    }
}

function calculate() {
    updateNumbers(); 

    //If CathetusA and B are known, calculate the rest
    if(cathetusAKnown && cathetusBKnown) {
        if(!hypotenuseKnown) {
            calcHypotenuse();
        }

        if(!angleAKnown) {
            calcAngleA();
        }

        if(!angleBKnown) {
            calcAngleB();
        }
    }

    //If CathetusA and the hypotenuse are known, calculate the rest
    if(cathetusAKnown && hypotenuseKnown) {
        if (!cathetusBKnown) {
            calcCathetusB();
        }

        if(!angleAKnown) {
            calcAngleA();
        }

        if(!angleBKnown) {
            calcAngleB();
        }
    }

    //If CathetusB and the hypotenuse are known, calculate the rest
    if(cathetusBKnown && hypotenuseKnown) {
        if (!cathetusAKnown) {
            calcCathetusA();
        }

        if(!angleAKnown) {
            calcAngleA();
        }

        if(!angleBKnown) {
            calcAngleB();
        }
    }

    drawNumbers();
}

1 个答案:

答案 0 :(得分:1)

最后一个案例(计算cathetus给定的cathetus B和斜边)有点好,但公式错了。

鉴于hyp² = a² + b²你知道a = sqrt(hyp² - b²)而你正在计算相反的(sqrt(b² - hyp²)),这将导致NaN,因为你将占据广场负数的根。

另一个类似的情况也出现了另一个错误(它没有给出NaN,但结果是错误的,因为你添加斜边的平方和直角。