如何将这些“ if”语句转换为算法

我正在尝试将这些'if'语句转换为算法,以便我可以有更多的阶段而不是被限制为10。如何转换它?我只是无法理解逻辑!


function getStage(km) { 

    if (km > 2 && km < 4){

        return 1;

    }

    else if (km > 4 && km < 6){

        return 2;

    }

    else if (km > 6 && km < 8){

        return 3;

    }

    else if (km > 8 && km < 10){

        return 4;

    }

    else if (km > 10 && km < 12){

        return 5;

    }

    else if (km > 12 && km < 14){

        return 6;

    }

    else if (km > 14 && km < 16){

        return 7;

    }

    else if (km > 16 && km < 18){

        return 8;

    }

    else if (km > 18 && km < 20){

        return 9;

    }

    else if (km > 20 && km < 22){

        return 10;

    }

}

我已经试过了:


function getStage(km) { 

    var tempStage = 0;


    for (var i = 0; i < stages; i++) {

        var stage = i + 1;

        var tempKm = stage * 2;

        var nextKm = stage + 2;


        if (km > tempKm && km < nextKm) {

            tempStage = stage;

        }

    }

    return tempStage;

}

也许我不应该使用for循环?有更好的方法吗?


慕雪6442864
浏览 187回答 3
3回答

九州编程

也许您正在寻找Math.floorfunction getStage(km) {&nbsp; &nbsp; return Math.floor(km / 2)}console.log(getStage(2));// 1console.log(getStage(10));// 5console.log(getStage(11));// 5

偶然的你

您可以将底值km除以2加1。10 是上限。function getStage(km) {&nbsp; &nbsp; return Math.min((km >> 1) + 1, 10);}console.log(getStage(2.1)); // 2console.log(getStage(3)); // 2console.log(getStage(4)); // 4

素胚勾勒不出你

您可以使用数学来做到这一点。无需循环或条件。请注意,您的输入间隔以2的“步长”增加,而输出以1的“步长”增加。这使我认为也许应该将km除以2。由于我们总是想要一个整数答案,因此我们可以使用floor函数。一些示例:floor(3/2)= 1floor(4.1 / 2)= 2等等。根据您要返回的极端情况(如果km = 2或km = 4或2的倍数是多少?),我们可以在此处完成操作。如果您希望在k = 4时返回1,在k = 6时返回2,依此类推,则需要做更多的工作。*通常:*如果您正在处理数字,并且发现自己写了很多个案,则通常可以使用一些简单的数学运算符组合来计算结果。对于此类问题,请尝试考虑您的输入/输出对以及它们之间的关系。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript