一道在知乎很火的Java题——如何输出 ab

如何输出"ab"

public class OutAB {
    public static void main(String[] args) {
        if(){
            System.out.println("a");
        }else{
            System.out.println("b");
        }
    }
}

解法一
思路一:脑筋急转弯——注入一段逻辑直接改变原 if 结构。
填入内容 true){System.out.print("a");}if(false。

public static void main(String[] args) {
 if (true) {
            System.out.print("a");
        }
        if (false) {
            System.out.print("a");
        } else {
            System.out.print("b");
        }
}

类似地也可以填入 true){System.out.print("ab");return;}if(false 等。
解法二
思路二:如果正经遵从题目的原代码结构,那就得想办法构造一段代码,既能输出 a,又能返回 false。
我也想到能否使用 System.out.print 的返回值来做文章,但奈何并不记得它返回什么。首先让我们复习一下 PrintStream 的 print、println 和 printf 方法的区别:
方法功能返回值print打印一个值或者对象void println打印并换行void printf格式化打印Print Stream所以适用的是 printf,它的返回值是 PrintStream 类型的 System.out,判它是否为空即可。
经测试填入 System.out.append("a") == null 也是可以达到效果的。

public static void main(String[] args) {
        if (System.out.printf("a") == null) {
            System.out.print("a");
        } else {
            System.out.print("b");
        }
    }

解法三
与解法二是同一思路,但从匿名内部类来作文章。

public static void main(String[] args) {
        if (new Object() {
            boolean print() {
                System.out.print("a");
                return false;
            }
        }.print()) {
            System.out.print("a");
        } else {
            System.out.print("b");
        }
    }
这里利用的知识点是匿名内部类可以声明基类没有的新方法并且马上调用。

解法四
使用 Java 8 里的 lambda 来实现思路二。

public static void main(String[] args) {
        //如何输出"ab"
        if (((BooleanSupplier)(() -> {System.out.print("a");return false;})).getAsBoolean()) {
            System.out.print("a");
        } else {
            System.out.print("b");
        }
    }
严格来讲这个不一定能算作正确答案,因为要增加 import java.util.function.BooleanSupplier;。

解法五
脑洞大开:

public static void main(String[] args) {
        // if ( ) {
        System.out.print("a");
        // } else {
        System.out.print("b");
        // }
    }

转载于:https://blog.51cto.com/13890766/2352076

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值