JavaScript切换语句1-100

时间:2013-04-22 20:00:44

标签: javascript switch-statement

我正在尝试编写一个JavaScript开关,用户从1-100输入一个数字,然后根据该数字的范围收到一条消息。这就是我到目前为止所写的内容。

我这样做是为了编程类的介绍,我不完全理解如何让它工作,我的问题是我无法弄清楚如何显示范围,即:1-25,

    <script>
    var number =  prompt("Enter 1-100");
    switch(number)
    {
    case 1-25:
      document.write("1-25");
      break;
    case 26-50;
      document.write("26-50");
      break;
    case 51-100:
      document.write("51-75");
      break;
    case "4":
      document.write("76-100");
      break;
    }
    </script>

6 个答案:

答案 0 :(得分:7)

用一点点数学来计算它可能是一种更好的方法:

var number  = prompt("Enter 1-100"),
    message = ['1-25', '26-50', '51-75', '76-100'];

document.write(message[Math.ceil(number/25)-1])

FIDDLE

将返回的数字除以25,向上舍入到最接近的整数,得到1,2,3 ......等等,因为数组索引从零开始,减去1。

修改

如果您 进行切换,您仍然可以通过一些数学计算得更好,而不是写一百case个:

var number = prompt("Enter 1-100");
    number = Math.ceil(number / 25 );

switch(number) {
    case 1:
      document.write("1-25");
      break;
    case 2:
      document.write("26-50");
      break;
    case 3:
      document.write("51-75");
      break;
    case 4:
      document.write("76-100");
      break;
}

FIDDLE

答案 1 :(得分:2)

你可以使用带有这样的开关的条件:

var number = prompt("Enter 1-100");
switch (true) {
    case number >= 1 && number <= 25:
        alert("1-25");
        break;
    case number >= 26 && number <= 50:
        alert("26-50");
        break;
    case number >= 51 && number <= 75:
        alert("51-75");
        break;
    case number >= 76 && number <= 100:
        alert("76-100");
        break;
}

http://jsfiddle.net/dfsq/T3zJR/

答案 2 :(得分:0)

这是一种表驱动方法,允许您在不编写更多代码的情况下向表中添加更多项。它还增加了范围检查。

<script>
    var breaks = [0, 25, 50, 75, 100];
    var number = parseInt(prompt("Enter 1-100"), 10);
    var inRange = false;
    if (number) {
        for (var i = 1; i < breaks.length; i++) {
            if (number <= breaks[i]) {
                document.write((breaks[i-1] + 1) + "-" + breaks[i]);
                inRange = true;
                break;
            }
        }
    }
    if (!inRange) {
        document.write("Number not in range 1-100");
    }
</script>

答案 3 :(得分:0)

您不能在switch语句中使用范围。要检查某个值是否包含在某个范围内,您需要与下限和上限进行比较:

number = parseInt(number, 10);
if (number >= 1 && number <= 25)
    document.write("1-25");
else if (number >= 26 && number <= 50)
    document.write("26-50");
else if (number >= 51 && number <= 75)
    document.write("51-75");
else if (number >= 75 && number <= 100:
    document.write("76-100");
else
    document.write(number+" is not a valid number between 1 and 100");

当然,随着if-elses的数量增加,你应该寻找替代方案。算法解决方案将是最简单的(除以25和舍入以找到包含数字的25倍多个区间):

number = parseInt(number, 10);
var range = Math.floor((number-1)/25);
if (range >= 0 && range < 4)
    document.write( (1+range*25) + "-" + (1+range)*25);

如果你不能使用它(例如因为不稳定的间隔),在一个区间边界数组上的for循环(甚至是二分搜索)将是要走的路(如@jfriend00所示)。 / p>

答案 4 :(得分:0)

你需要一个单个值来匹配一个案例,或者一个开关需要更长的时间......

你可以在切换前获得范围 -

var number = prompt("Enter 1-100", '');
var s= (function(){
    switch(Math.floor((--number)/25)){
        case 0: return "1-25";
        case 1: return "26-50";
        case 2: return "51-75";
        default: return "76-100";
    }
})();
alert(s);

答案 5 :(得分:0)

如果你想要25的简单范围,你可以这样做:

if (number < 1 || number > 100)
    document.write("out of range");
else {
    var low = Math.floor(number / 25) * 25 + 1;
    var high = low + 24;

    document.write(low + "-" + high);
}