我的Java教科书问我以下错误:
switch (score)
{
case (score > 90):
grade = 'A';
break;
case (score > 80):
grade = 'B';
break;
default:
grade = 'C';
}
我已经知道错误的位置:
(score > 90)
等比较构建切换语句;那是if / else语句。 但是这让我想知道:如何一个switch语句有效地解释了整数范围?
我能想到的最明显的例子如下,但我发现它相当暴力:
switch (score)
{
case 90: case 91: case 92: case 94: case 95:
case 96: case 97: case 98: case 99: case 100:
grade = 'A';
break;
case 80: case 81: case 82: case 84: case 85:
case 86: case 87: case 88: case 89:
grade = 'B';
break;
default:
grade = 'C';
}
如何在switch语句中表达这样的概念?
答案 0 :(得分:8)
如果您利用分数随着10
的每次更改而变化的事实,并假设score
是整数数据类型,那么您可以除以10
消除大多数情况:
switch (score / 10)
{
case 9:
case 10:
grade = 'A';
break;
case 8:
grade = 'B';
break;
default:
grade = 'C';
}
如果没有这样的规则(如果"等级"桶大小不同且任意),那么你能做的最好的是if / else-if / else语句。
答案 1 :(得分:1)
简短的回答:它不能。 答案很长:switch语句不能接受这样的表达式,因为switch语句对变量的单个值进行操作,而不是像你所示的一系列变量。
答案 2 :(得分:1)
可能不是最佳答案,但可以采用非常简单的方法
int temp;
if(score > 90)
temp = 1;
else if(score > 80)
temp = 2;
switch (temp)
{
case (1):
grade = 'A';
break;
case (2):
grade = 'B';
break;
default:
grade = 'C';
}
答案 3 :(得分:1)
我刚刚制作的这个版本可以被认为更优雅:
int score_new = score/10
\\This gets you the first digit.. make sure score_new is int and not double
switch (score_new)
{
case 10: case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
default:
grade = 'C';
}
答案 4 :(得分:1)
在某些编程语言中有类似的东西
switch (true) {
case (0 <= val && val < 1000): /* do something */ break;
case (1000 <= val && val < 2000): /* do something */ break;
...
case (29000 <= val && val < 30000): /* do something */ break;
}
是可能的,但首先它不是非常高效,第二个java不接受它。所以使用if-then-else:
int val = 500;
if (0 <= val && val < 1000){ System.out.println("Test");}
else if (1000 <= val && val < 2000){ /* do something */}
else if (29000 <= val && val < 30000){ /* do something */}
答案 5 :(得分:0)
对于您的情况,if
语句更好,更易读。 switch
语句适用于少量int
或enum
值。
答案 6 :(得分:-1)
在Java中,switch
语句只能测试int
值(自Java 1.0起),枚举值(自Java 5.0起)和字符串值(自Java 7.0起),并且只能测试测试平等。请注意,byte
,short
和char
可以上传到int
。但无法测试long
,float
和double
值。
法律例子:
int x = (...);
switch (x) {
case 0: (...)
}
byte x = (...);
switch (x) {
case 0: (...)
}
String x = (...);
switch (x) {
case "a": (...)
}
非法的例子:
long x = (...);
switch (x) {
case 0: (...)
}
double x = (...);
switch (x) {
case 0.0: (...)
}