问号冒号开关案例

时间:2014-05-14 13:58:58

标签: java switch-statement conditional-operator

public Boolean prendiTessera(TipoTerreno tipo) {

    switch(tipo){

    case PIANURA: tesserePianura != 4 ? tesserePianura++ : return false;

    case CAMPAGNA: tessereCampagna != 4 ? tessereCampagna++ : return false;

    case MONTAGNA: tessereMontagna != 4 ? tessereMontagna++ : return false;

    case DESERTO: tessereDeserto != 4 ? tessereDeserto++ : return false;

    case FIUME: tessereFiume != 4 ? tessereFiume++ : return false;

    case BOSCO: tessereBosco != 4 ? tessereBosco++ : return false;

    default: return false;  
    }

    return true;

}

Eclipse报告以下错误(对于每一行):

  

令牌“!=”上的语法错误,AssignmentOperator

无效      

令牌“return”上的语法错误,删除此令牌

     

类型不匹配:无法从布尔值转换为int

变量:

  

private int tesserePianura;

     

private int tessereCampagna;

     

private int tessereMontagna;

     

private int tessereDeserto;

     

private int tessereFiume;

     

private int tessereBosco;

枚举类:

public enum TipoTerreno {

/** terreno pianura. */
PIANURA,

/** terreno campagna. */
CAMPAGNA,

/** terreno montagna. */
MONTAGNA,

/** terreno deserto. */
DESERTO,

/** terreno fiume. */
FIUME,

/** terreno bosco. */
BOSCO,

/** terreno Sheepsburg. */
SHEEPSBURG;

}

2 个答案:

答案 0 :(得分:0)

将您的代码更改为此,您的问题已排序

public Boolean prendiTessera(TipoTerreno tipo) {
    boolean flag=true;
    switch (tipo) {

        case PIANURA: flag=tesserePianura != 4 ? true :false; break;

        case CAMPAGNA: flag=tessereCampagna != 4 ? true : false;break;

        case MONTAGNA: flag=tessereMontagna != 4 ? true : false;break;

        case DESERTO: flag=tessereDeserto != 4 ? true : false;break;

        case FIUME: flag=tessereFiume != 4 ? true : false;break;

        case BOSCO: flag=tessereBosco != 4 ? true : false;break;

        default: flag=false;  
    }
    if (flag)
        tessereMontagna++;
    return flag;
}

问题描述:

tesserePianura != 4 ? tesserePianura++ : return false;

您的这句话并不是一个完整的陈述,这就是您收到错误的原因。 而你的其他部分/最后部分是一个完整的陈述,它不能表达(即三元运算符)。

此外,三元运算符旨在产生一些结果,这些结果将分配给某个变量直接间接

让我向你解释一下 直接分配

flag=tessereBosco != 4 ? true : false;

在这种情况下,值直接分配给变量flag

间接作业

System.out.println(tessereBosco != 4 ? true : false);

在这种情况下,将对函数(即println())变量进行赋值。

答案 1 :(得分:0)

这是使用三元运算符

来纠正这种情况的最简单方法
public Boolean prendiTessera(TipoTerreno tipo) {
    int test;

    switch(tipo){

        case PIANURA: test= ( tesserePianura != 4) ? tesserePianura++ : 0; break;

        case CAMPAGNA: test=( tessereCampagna != 4) ? tessereCampagna++ : 0;break;

        case MONTAGNA: test=  (tessereMontagna != 4) ? tessereMontagna++ : 0;break;

        case DESERTO: test= (tessereDeserto != 4) ? tessereDeserto++ :0;break;

        case FIUME: test= (tessereFiume != 4) ? tessereFiume++ : 0;break;

        case BOSCO:test=  (tessereBosco != 4) ? tessereBosco++ :0;break;

        default: test=0;  
    }

    return (test==1);

}