这是一个源自知乎的话题,原贴链接:一道百度的面试题,有大神会嘛?

虽然我不是大神,但我也点进去看了一下,思考了一会之后有了一些思路,然后去看其它人的答案的时候果然全都已经被各路大神们先想到并贴出来了,所以我就不去凑热闹写重复答案了,整理一下网友们的智慧在这里自娱自乐好了。

题目

思路一

作为一个多年前也见过不少笔试题的少年,看到这个题目的第一想法是脑筋急转弯——注入一段逻辑直接改变原 if 结构。

解法一

填入内容true){System.out.print("a");}if(false。

public void print() {

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

格式化打印

PrintStream

所以适用的是printf,它的返回值是PrintStream类型的System.out,判它是否为空即可。

填入内容System.out.printf("a") == null。

public void print() {

if (System.out.printf("a") == null) {

System.out.print("a");

} else {

System.out.print("b");

}

}

经测试填入System.out.append("a") == null也是可以达到效果的。

解法三

仍然是思路二,但从匿名内部类来作文章。

实现代码:

public void print() {

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 void print() {

if (((BooleanSupplier)(() -> {System.out.print("a");return false;})).getAsBoolean()) {

System.out.print("a");

} else {

System.out.print("b");

}

}

严格来讲这个不一定能算作正确答案,因为要增加import java.util.function.BooleanSupplier;。

脑洞大开

讲完严肃的解法,来看看网友穷小子开脑洞的思路:

public void print() {

// if ( ) {

System.out.print("a");

// } else {

System.out.print("b");

// }

}

如果没有特意说明只能在括号里加东西,倒真是个妙计!

同样看得我一愣一愣的还有caiwei同学的答案,他和朋友们发现题目里少写了个大括号(真的),于是我们看到他的朋友老方的解决方案:

真是防不胜防啊~不过我喜欢!

java 输出ab_一道在知乎很火的 Java 题——如何输出 ab【转】相关推荐

  1. java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )

    java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( ) A args[0] = "MyTest a b c" B args[0] ...

  2. 普通的java类型是指,String是一个很普通的类 - Java那些事儿

    上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个cha ...

  3. 近些年很火的Java,就业前景到底怎么样?

    Java是快速发展的编程语言,企业开发很多都会优先考虑Java,因为它安全.简单.面向对象.多线程.面对人才需求如此大的的现状,Java开发就业前景到底怎么样? Web开发: 能做大型的互联网网站如, ...

  4. 几个很火的 Java 项目,开源!

    大家好,我是易,今天看到好友推荐了几个 Java 的开源项目,都很不错,给大家分享一下~ 分别是: Mindustry :一款 Java 语言编写的沙盒塔防游戏,目前已经上架 Apple Store ...

  5. c java python用于什么_很火的Java、Python、C、C++、PHP各有什么用途?一文帶你了解...

    用任何編程語言來開發程序,都是為了讓計算機干活,比如編寫一篇文章,下載一首MP3等,而計算機干活的CPU只認識機器的指令.所以,盡管不同的編程語言差異極大,最后都得"翻譯"成CPU ...

  6. Java+jxbrowser+jna+js实现抖音很火的时钟桌面WallPaperEngine

    很早以前就在抖音上看到电脑时钟桌面,当时都惊呆了,不知道是如何实现的,但抖音上也没有说实现步骤,也就没有放在心上.前段时间刚刚换了个新的显示器,想着更新一下桌面背景,网上找了一翻,没有特别喜欢的背景图 ...

  7. java 判断是不是奇数_很火的Java题——判断一个整数是否是奇数

    请写一个方法,判断一个整数是否为奇数: public static boolean isOdd(int i); 最普通的写法,也体现了我们的思考过程 public static boolean isO ...

  8. java 模拟登录出现系统异常_很奇怪!Java web问题,模拟登陆教务系统刷新两次后就没反应了!...

    我用HttpClient 4.5模拟登陆自己学校的教务系统,我们学校登陆成功先返回一个302跳转(勿喷,正方教务...): 先获取隐藏值: /** * 获取隐藏值 * @throws ClientPr ...

  9. java语言编程三角形图形_编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用......

    导航:网站首页 > 编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用... 编程题:编写程序输入三角形的3条边长,计算并输出... 求助 ...

最新文章

  1. linux 解压xz包
  2. Java8 - Future 接口
  3. Tomcat 启动提示未发现 APR 的解决方法
  4. 弗吉尼亚理工计算机科学排名,2020年弗吉尼亚理工大学排名TFE Times美国最佳计算机科学硕士专业排名第45...
  5. 面向.NET开发人员的Dapr——服务调用
  6. 一个备份sql server文件.bak还原成两个数据库
  7. spring boot jwt_springboot整合JWT
  8. mysql php 时间比较大小_mysql中日期大小比较实例
  9. 设置c++程序的堆栈空间解决栈溢出问题
  10. 《变革中的思索》连载二:依旧有效的四律
  11. 〖Linux〗VirtualBox修改虚拟电脑硬盘(vdi)空间大小
  12. 13. jQuery - 设置内容和属性
  13. win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
  14. Gambit 4.运行时选项
  15. 罗技G29方向盘与Unity的连接交互
  16. Python+Opencv身份证号码区域提取及识别
  17. DIY 航模GPS (M8N+HMC5883L)
  18. java、class、jar、aar、dex、smali、apk之间的关系
  19. 青藤 #10064 奇怪的电梯
  20. 可视化界面 Sentinel 流控卫兵 限流 熔断 系统保护

热门文章

  1. PHP面试题:对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息
  2. Implementation of WC in JAVA
  3. Mongodb 集群加keyFile认证
  4. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 Excel Services中新功能...
  5. 彻底弄懂jQuery事件原理一
  6. [微软面试100题]61-70
  7. 风影ASP.NET基础教学 3 web服务器控件(二)
  8. OnInit 和 Page_Init 事件有什么不同
  9. matlab有向图分割算法,基于万有引力搜索算法图像分割的MATLAB实现
  10. aspx网页背景图片设置代码_python requests,BeautifulSoup批量下载360图片