Почему этот метод не работает? Тернарный оператор в 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");
}