我正在尝试编写一个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>
答案 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])
将返回的数字除以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;
}
答案 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;
}
答案 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);
}