Java 在交换机中使用关系运算符

Java 在交换机中使用关系运算符,java,operators,switch-statement,relational,Java,Operators,Switch Statement,Relational,在switch语句中是否有使用关系运算符(=)的方法 int score = 95; switch(score) { case (score >= 90): // do stuff } 上面的例子(显然)不起作用它永远不会起作用。您首先应该了解开关的功能 它将执行与switch参数匹配的case下的语句 在这种情况下,score是一个参数,它是95,但score>=90将始终计算为true或false,并且从不匹配整数 您应该改用if语句 而且Java不允许在切换情

在switch语句中是否有使用关系运算符(=)的方法

int score = 95;

switch(score)  {
   case (score >= 90):
      // do stuff
}

上面的例子(显然)不起作用

它永远不会起作用。您首先应该了解
开关
的功能

它将执行与switch参数匹配的case下的语句

在这种情况下,
score
是一个参数,它是
95
,但
score>=90
将始终计算为
true
false
,并且从不匹配整数

您应该改用
if
语句


而且Java不允许在切换情况下使用
booleans

简单地

int score = 95;

switch(score)  {
   case (score >= 90):
      // do stuff
}
您正在将
int
值传递给
开关
。因此,案例的值必须为
int
值,其中

(score >= 90)
转换为布尔值


你的案件是
的好候选人,如果还有

不,你不能。

关系运算符(=)产生
布尔值
,这是不允许的

以下所有条件都必须为真,否则会发生编译时错误:

  • 与switch语句关联的每个case常量表达式必须可分配(§5.2)到switch表达式的类型

  • 与switch语句关联的两个case常量表达式不能具有相同的值

  • 没有开关标签为空

  • 最多一个默认标签可以与同一switch语句关联


不幸的是,没有,但您可以通过分组多个case语句而不使用
中断
来使用
case
fall(有点黑),并在范围结束时实现代码:

int score = 95;
switch(score) {
 ..
 case 79: System.out.println("value in 70-79 range"); break;
 case 80:
 ..
 case 85: System.out.println("value in 80-85 range"); break;
 case 90:
 case 91:
 case 92:
 case 93:
 case 94:
 case 95: System.out.println("value in 90-95 range"); break;
 default: break;
}
IMHO,在您的特定情况下,使用
if
更合适。

语句说明:

switch语句仅基于单个整数、枚举值或字符串对象测试表达式

所以没有布尔值。这样做没有意义,因为您只有两个值:
true
或false

您可以编写一个方法来检查分数,然后返回
开关
可以处理的类型之一

例如:

enum CheckScore {
    SCORE_HIGHER_EQUAL_90,
    ...
}


public CheckScore checkScore(int score) {
    if(score >= 90) {
        return SCORE_HIGHER_EQUAL_90;
    } else if(...) {
        return ...
    }
}
然后在交换机中使用它:

switch(checkScore(score))  {
   case SCORE_HIGHER_EQUAL_90:
      // do stuff
}

。。。或者你可以直接使用
if,else-if,else

显然,作为一种语言结构,这是不可能的。但是,只是为了好玩,我们可以自己实现它

public class Switch<T, V> {

    public static interface Action<V> {
        V run();
    }

    private final T value;
    private boolean runAction = false;
    private boolean completed = false;
    private Action<V> actionToRun;

    public Switch(T value) {
        this.value = value;
    }

    static public <T, V> Switch<T, V> on(T value) {
        return new Switch<T, V>(value);
    }

    public Switch<T, V> ifTrue(boolean condition) {
        runAction |= condition;
        return this;
    }

    public Switch<T, V> ifEquals(T other) {
        return ifTrue(value.equals(other));
    }

    public Switch<T, V> byDefault(Action<V> action) {
        this.actionToRun = action;
        return this;
    }

    public Switch<T, V> then(Action<V> action) {
        if (runAction && !completed) {
            actionToRun = action;
            completed = true;
        }
        return this;
    }

    public V getResult() {
        if (actionToRun == null) {
            throw new IllegalStateException("none of conditions matched and no default action was provided");
        }
        return actionToRun.run();
    }
}
这个简单的测试:

for (int score : new int[] { 97, 85, 66, 55, 42, 32, 4 }) {
    System.out.println(score + ": " + tellMeMyScore(score));
}
打印出:

97: you rock!
85: not bad, not bad
66: not bad, not bad
55: really poor score
42: that's the answer!
32: really poor score
4: really poor score

如果您需要使用交换机本身,这可能会对您有所帮助

char g ='X';
            int marks = 65;
            switch(marks/10)
            {
                case 1:
                case 2:
                case 3:
                case 4: g = 'F';
                        break;
                case 5: g = 'E';
                        break;
                case 6: g = 'D';
                        break;
                case 7: g = 'C';
                        break;
                case 8: g = 'B';
                        break;
                case 9: 
                case 10: g = 'A';       
                         break;
            }
            System.out.println(g);
它是这样工作的

    if(marks<50)
                g='F';
            else if(marks<60)
                g='E';
            else if(marks<70)
                g='D';
            else if(marks<80)
                g='C';
            else if(marks<90)
                g='B';
            else if(marks<=100)
                g='A';

if(marks@dabe:不客气。如果这解决了您的问题,请将答案标记为已接受。这已经有很多年了,但如果您碰巧看到此评论,这是如何/为什么工作的?
char g ='X';
            int marks = 65;
            switch(marks/10)
            {
                case 1:
                case 2:
                case 3:
                case 4: g = 'F';
                        break;
                case 5: g = 'E';
                        break;
                case 6: g = 'D';
                        break;
                case 7: g = 'C';
                        break;
                case 8: g = 'B';
                        break;
                case 9: 
                case 10: g = 'A';       
                         break;
            }
            System.out.println(g);
    if(marks<50)
                g='F';
            else if(marks<60)
                g='E';
            else if(marks<70)
                g='D';
            else if(marks<80)
                g='C';
            else if(marks<90)
                g='B';
            else if(marks<=100)
                g='A';