最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

JavaScript switch statement 1-100 - Stack Overflow

programmeradmin1浏览0评论

I am trying to write a JavaScript switch where the user enters a number from 1-100 and they receive a message based on what range the number falls into. This is what I have written so far.

I am doing this for an intro to programing class, and I don't fully understand how to get this to work, my problem is that I can't figure out how to show a range, ie: 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>

I am trying to write a JavaScript switch where the user enters a number from 1-100 and they receive a message based on what range the number falls into. This is what I have written so far.

I am doing this for an intro to programing class, and I don't fully understand how to get this to work, my problem is that I can't figure out how to show a range, ie: 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>
Share Improve this question edited Dec 10, 2018 at 6:38 Cœur 38.8k25 gold badges205 silver badges277 bronze badges asked Apr 22, 2013 at 20:00 Thomas NobleThomas Noble 211 silver badge3 bronze badges 5
  • 1 And the question is...? – VisioN Commented Apr 22, 2013 at 20:01
  • 4 1-25 is an expression that subtracts 25 from 1, resulting in -24. – Barmar Commented Apr 22, 2013 at 20:01
  • 1 That's simply not how JavaScript switch statements work, I'm afraid. – Pointy Commented Apr 22, 2013 at 20:03
  • 5 Just use if/else if/else - you can organize it the same way and it'll actually work for what you expect – Ian Commented Apr 22, 2013 at 20:03
  • JavaScript is one word, not two. – epascarello Commented Apr 22, 2013 at 20:04
Add a ment  | 

6 Answers 6

Reset to default 7

Just figuring it out with a little math is probably a better approach :

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

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

FIDDLE

Divide the returned number with 25, round up to nearest whole number, which gives you 1,2,3 ... etc, and since array indices starts at zero, subtract 1.

EDIT:

If you have to do a switch, you'd still be better off with a little math, and not writing a hundred case's :

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

You can use conditions with switch like this:

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/dfsq/T3zJR/

You cannot use ranges in switch statements. To check whether a value is contained in a range, you need to pare against lower and upper bounds:

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");

Of course, as the number of if-elses grows, you should look for an alternative. An algorithmic solution would be the simplest (dividing by 25 and rounding to find the 25-multiple interval the number is contained in):

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

If you can't use that (for example because of erratic intervals) a for-loop (or even a binary search) over an array of interval boundaries would be the way to go (as demonstrated by @jfriend00).

If you want simple ranges of 25, you can do this:

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);
}

You need a single value to match a case, or a switch takes longer than if elses...

you can get the range before switching-

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);

Here's a table driven approach that allows you to add more items to the table without writing more code. It also adds range checking.

<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>
发布评论

评论列表(0)

  1. 暂无评论