Using switch statement with a range of value in each case?
Java has nothing of that sort. Why not just do the following?
public static boolean isBetween(int x, int lower, int upper) {
return lower <= x && x <= upper;
}
if (isBetween(num, 1, 5)) {
System.out.println("testing case 1 to 5");
} else if (isBetween(num, 6, 10)) {
System.out.println("testing case 6 to 10");
}
Using switch statement with a range of value in each case?
Java has nothing of that sort. Why not just do the following?
public static boolean isBetween(int x, int lower, int upper) {
return lower <= x && x <= upper;
}
if (isBetween(num, 1, 5)) {
System.out.println("testing case 1 to 5");
} else if (isBetween(num, 6, 10)) {
System.out.println("testing case 6 to 10");
}
range of values in a switch statement
how about
if(total >= 100)
{
//use 50%
}
else if(total >= 50)
{
//use 40%
}
else if(total >= 20)
{
//use 30%
}
else if(total >= 10)
{
//use 20%
}
else
{
//no discount
}
If you reach the else if for total >= 50
, you already know that total < 100
. and so on. This is really what makes use of a good if..else if..else
statement, when you can infer conditions based on the previous statements. Your code right now would be equivalent if you used just if statements.
Also
total = (((x*99) - (x * 99)* .2));
would be better written as
total = x * 99 * (1-.2)
How can I use ranges in a switch case statement using JavaScript?
You have at least four options:
1. List each case
As shown by LightStyle, you can list each case explicitly:
switch(myInterval){
case 0:
case 1:
case 2:
doStuffWithFirstRange();
break;
case 3:
case 4:
case 5:
doStuffWithSecondRange();
break;
case 6:
case 7:
doStuffWithThirdRange();
break;
default:
doStuffWithAllOthers();
}
2. Use if
/ else if
/ else
If the ranges are large, that gets unwieldy, so you'd want to do ranges. Note that with if...else if...else if
, you don't get to the later ones if an earlier one matches, so you only have to specify the upper bound each time. I'll include the lower bound in /*...*/
for clarity, but normally you would leave it off to avoid introducing a maintenance issue (if you include both boundaries, it's easy to change one and forget to change the other):
if (myInterval < 0) {
// I'm guessing this is an error
}
else if (/* myInterval >= 0 && */ myInterval <= 2){
doStuffWithFirstRange();
}
else if (/* myInterval >= 3 && */ myInterval <= 5) {
doStuffWithSecondRange();
}
else if (/* myInterval >= 6 && */ myInterval <= 7) {
doStuffWithThirdRange();
}
else {
doStuffWithAllOthers();
}
3. Use case
with expressions:
JavaScript is unusual in that you can use expressions in the case
statement, so we can write the if...else if...else if
sequence above as a switch
statement:
switch (true){
case myInterval < 0:
// I'm guessing this is an error
break;
case /* myInterval >= 0 && */ myInterval <= 2:
doStuffWithFirstRange();
break;
case /* myInterval >= 3 && */ myInterval <= 5:
doStuffWithSecondRange();
break;
case /* myInterval >= 6 && */ myInterval <= 7:
doStuffWithThirdRange();
break;
default:
doStuffWithAllOthers();
}
I'm not advocating that, but it is an option in JavaScript, and there are times it's useful. The case
statements are checked in order against the value you give in the switch
. (And again, lower bounds could be omitted in many cases because they would have matched earlier.) Even though the case
s are processed in source-code order, the default
can appear anywhere (not just at the end) and is only processed if either no case
s matched or a case
matched and fell through to the default (didn't have a break
; it's rare you want to do that, but it happens).
4. Use a dispatch map
If your functions all take the same arguments (and that could be no arguments, or just the same ones), another approach is a dispatch map:
In some setup code:
var dispatcher = {
0: doStuffWithFirstRange,
1: doStuffWithFirstRange,
2: doStuffWithFirstRange,
3: doStuffWithSecondRange,
4: doStuffWithSecondRange,
5: doStuffWithSecondRange,
6: doStuffWithThirdRange,
7: doStuffWithThirdRange
};
Then instead of the switch:
(dispatcher[myInterval] || doStuffWithAllOthers)();
That works by looking up the function to call on the dispatcher
map, defaulting to doStuffWithAllOthers
if there's no entry for that specific myInterval
value using the curiously-powerful ||
operator, and then calling it.
You can break that into two lines to make it a bit clearer:
var f = dispatcher[myInterval] || doStuffWithAllOthers;
f();
I've used an object for maximum flexibility. You could define dispatcher
like this with your specific example:
var dispatcher = [
/* 0-2 */
doStuffWithFirstRange,
doStuffWithFirstRange,
doStuffWithFirstRange,
/* 3-5 */
doStuffWithSecondRange,
doStuffWithSecondRange,
doStuffWithSecondRange,
/* 6-7 */
doStuffWithThirdRange,
doStuffWithThirdRange
];
...but if the values aren't contiguous numbers, it's much clearer to use an object instead.
Create a marker for range with switch statement in java
You can do the following:
import java.util.*;
public class Problem01 {
public static void main(String[] args) {
//create random integer
Random ran = new Random();
int sum = 0;
for (int i = 1; i <= 10; i++ ) {
int random = ran.nextInt(20);
//Printing the random number
System.out.print("Number " + "(" + random + "): ");
switch ((random-1)/5) {
case 0:
System.out.println("o");
break;
case 1:
System.out.println("x");
break;
case 2:
System.out.println("s");
break;
default: //to handle case where the number is bigger than 15
System.out.println("*");
break;
}
}
}
}
I'm not sure why you needed the inner loop.
This is the generated output for the above program.
Number (1): o
Number (10): x
Number (5): o
Number (13): s
Number (9): x
Number (13): s
Number (6): x
Number (16): *
Number (16): *
Number (10): x
edit: There is no direct way to use custom ranges with switch statements. This has been answered here
Related Topics
Get Selected Rows in Jtable Using Abstracttablemodel
How to Convert Comma-Separated String to List
Unrecognized Ssl Message, Plaintext Connection? Exception
Way to Get Number of Digits in an Int
Eclipse Can't Find Xml Related Classes After Switching Build Path to Jdk 10
How to Play .Wav Files with Java
Differencebetween Thread.Start() and Thread.Run()
Spring Data JPA - Zoneddatetime Format for JSON Serialization
Why Does Integer Division Code Give the Wrong Answer
Difference Between @Mock and @Injectmocks
Is There a Concurrent List in Java's Jdk
Differencebetween Up-Casting and Down-Casting with Respect to Class Variable
How to Iterate Through the Files in a Directory and It's Sub-Directories in Java