package com.company;
import java.util.Scanner;
public class Main {
public static boolean judge(int a,int b){
return a == b;
}
public static void main(String[] args) {
int a,b;
boolean c;
Scanner r = new Scanner(System.in);
a = r.nextInt();
b = r.nextInt();
c = judge(a,b) ? System.out.println("两数相等") : System.out.println("两数不相等");
}
}
package com.company;
import java.util.Scanner;
public class Main {
public static boolean judge(int a,int b){
return a == b;
}
public static void main(String[] args) {
int a,b;
boolean c;
Scanner r = new Scanner(System.in);
a = r.nextInt();
b = r.nextInt();
judge(a,b) ? System.out.println("两数相等") : System.out.println("两数不相等");
}
}
可以先理解一下statement和expression,语句和表达式,其实不仅是java其他语言都有这两个概念,java的方法里面放的都是statement,哪些是语句哪些是表达式,可以参考这个https://docs.oracle.com/javase/specs/jls/se8/html/index.html (英文的,但是也是最正统的java学习资料,我最近也在细看)下面我们就可以分析下它提示的错误了:
c = judge(a,b) ? System.out.println("两数相等") : System.out.println("两数不相等");
这是一个赋值语句是没有问题的,只是System.out.println("两数相等")这个返回是一个void,所以提示void无法转换为boolean值
judge(a,b) ? System.out.println("两数相等") : System.out.println("两数不相等");
查那个文档可以发现三目运算是一个表达式,在这里明显不合适
如果一定要用三目运算实现这个效果,可以用Lambda表达式完成这个操作:
public class Main {
public static boolean judge(int a,int b){
return a == b;
}
public static void main(String[] args) {
int a,b;
boolean c;
Scanner r = new Scanner(System.in);
a = r.nextInt();
b = r.nextInt();
Runnable f = judge(a,b) ? () -> {
System.out.println("两数相等");
}
: () -> {
System.out.println("两数不相等");
};
f.run();
}
}
你运行命令是什么样的? 截图不全……
前一个图里, c 定义是 boolean,但是下面
c = judge(a,b) ? System.out.println("两数相等") : System.out.println("两数不相等");
肯定不对,c 的结果 System.out.println("两数相等")
是 void
类型。
后一个图,只看到 java 不是语句,这个不应该,在前面 java 似乎都能执行了,应该是个命令,所以具体是什么问题不清楚,请更详细描述你要问的问题。
条件表达式用错了啊,c是布尔型的,条件表达式后面的System.. 语是一个语句,不是一个数据,怎么可能赋值给c,语句检测为void类型,当然出错了