1

我正在尝试编写一个 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>
4

6 回答 6

7

只是用一点数学来解决它可能是一种更好的方法:

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

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

小提琴

将返回的数字除以 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;
}

小提琴

于 2013-04-22T20:06:47.573 回答
3

您可以像这样使用带有 switch 的条件:

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/

于 2013-04-22T20:27:45.933 回答
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>
于 2013-04-22T20:16:51.893 回答
0

您需要一个来匹配一个案例,或者一个开关比 if elses 需要更长的时间......

您可以在切换之前获得范围-

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);
于 2013-04-22T20:27:19.523 回答
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-else 数量的增加,您应该寻找替代方案。算法解决方案将是最简单的(除以 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 所示)。

于 2013-04-22T20:18:42.083 回答
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);
}
于 2013-04-22T20:30:46.163 回答