java 输出ab_一道在知乎很火的 Java 题——如何输出 ab【转】
這是一個源自知乎的話題,原貼鏈接:一道百度的面試題,有大神會嘛?
雖然我不是大神,但我也點進去看了一下,思考了一會之后有了一些思路,然后去看其它人的答案的時候果然全都已經被各路大神們先想到并貼出來了,所以我就不去湊熱鬧寫重復答案了,整理一下網友們的智慧在這里自娛自樂好了。
題目
思路一
作為一個多年前也見過不少筆試題的少年,看到這個題目的第一想法是腦筋急轉彎——注入一段邏輯直接改變原 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方法的區別:
方法功能返回值
打印一個值或者對象
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【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 开启守护进程_[求助]Lin
- 下一篇: python123电脑登录不了_Pyth