2013-06-01 9 views

risposta

29

Gli operatori ternari non possono avere istruzioni che non restituiscono valori, metodi void. Hai bisogno di dichiarazioni che hanno valori di ritorno.

È necessario riscriverlo.

void bark(boolean hamlet) { 
    System.out.println(hamlet ? "To Bark." : "Not to Bark"); 
} 
8

Si può leggere il motivo per cui nel linguaggio Java Specification, 15.25. Conditional Operator ? :

Si tratta di un errore di compilazione per il secondo o il terzo espressione di operando per essere un'invocazione di un metodo di vuoto.

È necessario fare come suggeriscono molte delle altre risposte e applicare l'operatore condizionale al solo argomento.

0

Una dichiarazione ternario deve restituire qualcosa, si potrebbe usare un se qui:

void bark(boolean hamlet) 
{ 
    if (hamlet) 
    { 
    System.out.println("To Bark.") 
    } 
    else 
    { 
    System.out.println("Not to Bark"); 
    } 
} 
1

mi immagino che sia perché l'operatore ternario prevede di assegnare un valore. Prova questo:

void bark(boolean hamlet) { 
    String result = hamlet ? "To Bark!" : "Not to Bark"; 
    System.out.println(result) 
} 
4

Secondo §JLS.15.25:

ConditionalExpression: 
ConditionalOrExpression 
ConditionalOrExpression ? Expression : ConditionalExpression 

L'operatore condizionale è sintatticamente destra-associativa (gruppi IT da destra a sinistra). Quindi, a? B: c? D: e? F: g significa lo stesso di a? B: (c? D: (e? F: g)).

L'operatore condizionale ha tre espressioni di operando. ? appare tra la prima e la seconda espressione, e: appare tra la seconda e la terza espressione di .

La prima espressione deve essere di tipo booleano o booleano oppure si verifica un errore in fase di compilazione .

Si tratta di un errore in fase di compilazione per l'espressione dell'operando del secondo essere un richiamo di un metodo di annullamento.

+0

grazie per quei collegamenti alle specifiche. Non li avevo mai guardati prima. –

0

Gli operatori ternari devono restituire qualcosa. Così si può mettere dentro l'istruzione print, come ad esempio:

void bark(boolean hamlet) 
{ 
    System.out.printf("%s\n", hamlet ? "To Bark." : "Not to Bark"); 
} 

Oppure:

void bark(boolean hamlet) 
{ 
    System.out.println(hamlet ? "To Bark." : "Not to Bark"); 
} 
+0

Perché 'printf' quando lo standard Java e l'uso dell'OP sono' println'? – wchargin

+0

Non ho idea, questo è il mio goto. –