编写代码就是一句一句的赋值语句,三目运算最终得到的是一个结果,要把赋给一个变量才行。你这种写法也是行不通,你这代码表现出来的意图是在三目运算中输出,你应该改为将String字符串作为三目运算的结果,最后再输出,一句话,编译器没那么牛,还解释不了你现在这样的代码。
String result = i%4==0?(i%100==0?(i%400==0?
"This year is a leap year":
"This year is not a leap year"):
"This year is a leap year"):
"This year is not a leap year";
System.out.println(result);
三目这么用, 头晕呀, 三目运算符不是一个语句,只是表个表达式,所以要有=号来接收这个表达式的值
所以 应该 是这样的 System.out.println(i%4==0?(i%100==0?(i%400==0?.....)
其实这个原因不好描述,java里的三目运算符要求严格,我举个例子,a = (b==1)?(4+3):(4*5)
三目运算符最后应该得到个结果,这个结果应该赋个一个变量,这个你没有
然后就是?后面两个表达式都应该有个值的结果,以便赋给最后的结果,可是你那是个输出语句,根本没有运算结果,所以就报错了
三目运算符a > b ? a : b运算规则是:如果?前面的等式为true,即a>b,则执行返回a,否则返回b;
先判断变量year是否大于对象a的year值,如果大于就返回1,小于就继续判断year是否小于对象a的year值,如果小于就返回-1;此后就是year==a.year的情况,依次判断月份和日
以上回答你满意么?
三目运算符要这样用int c=a>b?1:2 这种形式的,方法楼上是对的。
这样写也行:
int i=2000;
boolean isleapyear=(i%400==0)?true:(i%4==0 && i%100!=0);
if(isleapyear)
System.out.println("This year is a leap year");
else
System.out.println("This year is not a leap year");