Почему этот метод не работает? Java-тернарный оператор

Что не так с этим кодом:

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

Ответ 1

Тернарные операторы не могут иметь операторов, которые не возвращают значения, методы void. Вам нужны операторы с возвращаемыми значениями.

Вам нужно переписать его.

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

Ответ 2

Вы можете прочитать, почему в Спецификации языка Java, 15.25. Условный оператор?:

Это ошибка времени компиляции для второго или третьего выражения операнда как вызов метода void.

Вам нужно сделать то же, что и некоторые другие ответы, и применить условный оператор только к аргументу.

Ответ 3

Согласно §JLS.15.25:

ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression

Условный оператор синтаксически право-ассоциативный (он группирует справа налево). Таким образом, a? B: c? D: e? F: g означает то же самое, что и а б:? (? C D: (Е: г)).

Условный оператор имеет три выражения операнда.? появляется между первым и вторым выражениями, и: появляется между второе и третье выражения.

Первое выражение должно иметь тип boolean или Boolean, или ошибка времени компиляции.

Это ошибка времени компиляции для второго или третьего операнда выражение является вызовом метода void.

Ответ 4

Я должен представить его, потому что тернарный оператор ожидает присвоить значение. Попробуйте следующее:

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

Ответ 5

Тернарный оператор должен что-то вернуть, вы можете использовать if, если здесь:

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

Ответ 6

Тернарные операторы должны что-то вернуть. Поэтому вы можете поместить его в оператор печати следующим образом:

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