2014-11-03 3 views
1

Почему этот тернарный оператор не работает здесь, но где, как в c, он работает отлично?Тернарный оператор в java vs c

import java.util.Scanner; 


     class Pack { 
     public static void main(String[] args) { 
      System.out.println("enter a number"); 
      Scanner s=new Scanner(System.in); 
      int i=s.nextInt(); 
      i%2==0?System.out.println("even"):System.out.println("odd"); 
     } 
    } 
+1

это потому, что 'System.out.println()' return 'void', где в качестве выражения ожидает некоторое значение. – Rustam

ответ

5

Поскольку вы не можете назначить такой оператор на Java. Ваш тройная будет работать, если вы использовали это нравится,

System.out.println(i%2==0 ? "even" : "odd"); 

Фундаментально, Java не C.

Редактировать

Вы спросите в комментариях, , где я я назначая ничего?

Цитирую Equality, Relational, and Conditional Operators (The Java Tutorials),

Другой условный оператор ?:, который можно рассматривать как сокращение для если-то-иначе заявления (обсуждается в разделе отчётность Flow Control этого урока). Этот оператор также известен как тройной оператор , поскольку он использует три операнда. В следующем примере оператор должен читаться как: «Если someCondition является true, присвоить значение value1 для result В противном случае присвоить значение value2 к result..»

Далее, Chapter 15. Expressions - Conditional Operator ? : (JLS-15.25) говорит

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

+0

Я тебя не понял, где я что-то присваиваю? – curositykiller

+0

@curositykiller Отредактировано. Акцент добавлен. –

+1

Раздел 15.25 может также представлять интерес: «Это ошибка времени компиляции для второго или третьего выражения операнда как вызов метода void». – awksp

Смежные вопросы