继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

Oraclea
关注TA
已关注
手记 88
粉丝 37
获赞 353

如何输出"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");
		// }
	}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP