Ошибки при использовании If-then-else

  • Автор темы @rtem
  • Дата начала
@

@rtem

привет! такая проблема использую в программе тернарный оператор ? : но при компиляции получаю ошибки вот та часть кода, где я его использую

Код:
Integer j1;
Integer j2;
Random rand = new Random();

j1 = rand.nextInt();
j2 = rand.nextInt();

j1 < j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);

и вот при компиляции выдает такие ошибки
Код:
javac Rand.java
Rand.java:28: > expected
j1 < j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);
^
Rand.java:28: not a statement
j1 < j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);
^
Rand.java:28: ';' expected
j1 < j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);
^
3 errors

меняю в
Код:
j1 < j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);
на
Код:
j1 > j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);
пишет только
Код:
javac Rand.java
Rand.java:28: not a statement
j1 > j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);
^
1 error

Подскажите, что я не так делаю и еще вопрос какая разница при использовании < или > это так критично???
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
юзай Integer.compareTo
или просто int вместо Integer

в ява операторы <, > определены только для примтивовов.
 
@

@rtem

сменил Integer -> int все равно ошибки такого плана

ничего не поменялось
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0


Note that it is a compile-time error for either the second or the third operand expression to be an invocation of a void method. In fact, it is not permitted for a conditional expression to appear in any context where an invocation of a void method could appear (§14.8).
 
@

@rtem

Сатурну больше не наливать. smile.gif
в смысле?
почему тогда так работает
Код:
int j1;
int j2;
j1 = rand.nextInt();
j2 = rand.nextInt();
if (j1 < j2) 
print.out("j1 < j2");
else
print.out("j1 > j2");
а с " ? : " нет, ведь насколько я понял то они как бы тождественны. Или я не туда копаю???
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
это разные языковые кострукиции с похожей семантикой.

в случае тернарного опретора требуется, что бы возвращался результат отличный от void, поэтому следующая коснтрукция для него верна
int i = (5 > 1) ? 1 : 0;
а такая нет
(5 > 1) ? System.out.println(1) :System.out.println(0), потому как println имеет следующую сигнатуру void println(bla, bla)
 
@

@rtem

во общем сделал, приблизительно то, что хотели правда как то сделал через задницу :huh: мне что то такое решение не понравилось
Код:
r1 = (j1 < j2) ? 1 : 0;		 
if (r1 == 1) print.out(" j1 < j2 ");
if (r1 == 0) print.out(" j1 > j2 ");

Спасибо за помощь.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Код:
if (j1 < j2) {
out.print("j1 < j2");
} else{
out.print("j1 > j2");
}

чем не устроило?
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
тебе в помощь
много лучше всяких курсов и тд
 
@

@rtem

спасибо, как раз думал, как бы мне параллельно повысить уровень английского языка :huh:
 
B

bemol

А если так ?

Код:
System.out.println(i < j ? "i < j" : "i > j");
 
@

@rtem

bemol
нормально, спасибо. но как говорится дорого ложка к обеду, но все равно очень благодарен.
 
K

Kirk

Integer j1;
Integer j2;
Random rand = new Random();

j1 = rand.nextInt();
j2 = rand.nextInt();

j1 < j2 ? System.out.println(j1 < j2) : System.out.println(j1 > j2);

Хм... По моему вы запутались. :) Изначально задача поставлено намного проще

[codebox]Random rand = new Random();
System.out.println(rand.nextInt() != rand.nextInt());[/codebox]
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!