JAVA 基础 选择语句 编程时为什么会出现以下错误


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("两数不相等");
    }

}

img

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("两数不相等");
    }

}

img

可以先理解一下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类型,当然出错了