网站首页 > 精选教程 正文
这是一个源自知乎的话题,原贴链接:一道百度的面试题,有大神会嘛?
虽然我不是大神,但我也点进去看了一下,思考了一会之后有了一些思路,然后去看其它人的答案的时候果然全都已经被各路大神们先想到并贴出来了,所以我就不去凑热闹写重复答案了,整理一下网友们的智慧在这里自娱自乐好了。
题目
思路一
作为一个多年前也见过不少笔试题的少年,看到这个题目的第一想法是脑筋急转弯——注入一段逻辑直接改变原 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打印一个值或者对象voidprintln打印并换行voidprintf格式化打印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 同学的答案,他和朋友们发现题目里少写了个大括号(真的),于是我们看到他的朋友老方的解决方案:
真是防不胜防啊~不过我喜欢!
猜你喜欢
- 2024-10-28 Java 8 中处理日期和时间示例 java 日期时间格式
- 2024-10-28 Java 实现日期的格式化,月份和天不足两位时补上0
- 2024-10-28 Java中日期格式化YYYY-DD的坑 java 日期格式化为yyyy-mm-dd mmss
- 2024-10-28 Java 的流程控制是什么样子的 java流程控制有哪些
- 2024-10-28 Java优雅的保留两位小数 java保留两位数字
- 2024-10-28 阿里面试官:聊聊如何格式化 Instant
- 2024-10-28 圆你的大厂梦!今日头条Java高频面试题真题:一/二/三面+常见问题
- 2024-10-28 “全栈2019”Java第十四章:二进制、八进制、十六进制
- 2024-10-28 Java,FreeMarker,模板引擎,通过案例代码,学懂模板引擎
- 2024-10-28 Springboot强大的数据格式化功能你必须要知道
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)