Почему этот метод не работает? Тернарный оператор в Java
что не так с этим кодом:
void bark(boolean hamlet) {
hamlet ? System.out.println("To Bark.") : System.out.println("Not to Bark");
}
6 ответов
тернарные операторы не могут иметь операторов, которые не возвращают значения,void
методы. Вам нужны операторы, которые имеют возвращаемые значения.
нужно переписать его.
void bark(boolean hamlet) {
System.out.println( hamlet ? "To Bark." : "Not to Bark" );
}
вы можете прочитать, Почему в спецификации языка Java, 15.25. Условный Оператор ? :
это ошибка времени компиляции для второго или третьего выражения операнда, чтобы быть вызовом метода void.
вам нужно сделать так, как предлагают несколько других ответов, и применить условный оператор только к аргументу.
по данным §JLS.15.25:
ConditionalExpression: ConditionalOrExpression ConditionalOrExpression ? Expression : ConditionalExpression
условный оператор синтаксически правоассоциативен (он группирует справа налево). Таким образом, a?b: c?д: и?f: g означает то же, что и а?b: (c?д: (д?f: g)).
условный оператор имеет три операнда выражения. ? кажется между первым и вторым выражениями, и : появляется между второе и третье выражения.
первое выражение должно быть тип boolean или Boolean, или a возникает ошибка времени компиляции.
это-ошибка времени компиляции для второго или третьего операнда выражение для вызова метода void.
Я должен представить его, потому что тернарный оператор ожидает присвоить значение. Попробуйте это:
void bark(boolean hamlet) {
String result = hamlet ? "To Bark!" : "Not to Bark";
System.out.println(result)
}
тернарный оператор должен что-то возвращать, вы можете использовать if здесь:
void bark(boolean hamlet)
{
if (hamlet)
{
System.out.println("To Bark.")
}
else
{
System.out.println("Not to Bark");
}
}
тернарные операторы должны что-то вернуть. Таким образом, вы можете поместить его в оператор печати следующим образом:
void bark(boolean hamlet)
{
System.out.printf("%s\n", hamlet ? "To Bark." : "Not to Bark");
}
или:
void bark(boolean hamlet)
{
System.out.println(hamlet ? "To Bark." : "Not to Bark");
}