2014-05-14 2 views
0
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; 

} 

이클립스 (각 행) 다음과 같은 오류가보고 토큰에물음표 대장 스위치 케이스

구문 오류, 잘못된 AssignmentOperator을

토큰 "반환"에

구문 오류 이 토큰

형식 불일치를 삭제 : 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; 

} 
+3

은'원 operator'이 (같은 경우/다른) 성명, 오히려 표현이 아님을 해결하는 가장 간단한 방법입니다. – GriffeyDog

+0

@ GriffeyDog, 문제는 삼항 연산자가 아닙니다. 명령문이 예상되는 곳에 나타나는 경우 표현식은 _is_ 명령문입니다. 문제는 '반환'입니다. 'return'은 문장이지만 표현식이 필요한 곳에 여기에 나타납니다 (즉, 삼항의 세 번째 인자로 나타납니다.) –

+0

@jameslarge 표현식이 값으로 평가됩니다. 그것은 자체적으로 _ 진술 문이며 삼항 연산자의 마지막 부분에 필요한 값으로 평가하지 않습니다. – GriffeyDog

답변

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; 

당신이 라인 ISN

' 완전한 역 그게 바로 당신이 잘못하고있는 이유입니다. 그리고 나머지 부분/마지막 부분은 표현식으로 올 수없는 완전한 문장입니다 (즉, 삼항 연산자).

또한 삼원 연산자 일부 변수 직접 또는 간접적에 할당 할 어떤 결과를 생성하는 것을 의미한다.

내가 직접 변수 flag에 할당이 경우 값 직접 할당

flag=tessereBosco != 4 ? true : false; 

당신이 설명해 보자.

함수의 경우에,이 할당에 할당 간접

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

(즉, println()) 변수가 될 것이다.

+2

이것은 컴파일 할 수 있지만 OP는 분명히 예를 들어'tesserePianura ++'의 부작용을 원합니다. 첫 번째 사례. – GriffeyDog

+0

나는이 실수의 부작용을 물어 보는 OP를 보지 못했다. 내 실수 일 것이다. 나를 향하여 나를 가리켜 주겠어 .GriffeyDog – TheMohanAhuja

+0

첫 번째'case' :'case PIANURA : tesserePianura! = 4? tesserePianura ++ : false를 반환합니다. – GriffeyDog

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

}