为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java

如何输出"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");
		// }
	}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消