Java 謎題 2:夢境
你有沒有從夢中醒來,然後發現你真的還在做夢?如果你醒來,你怎麼知道你回到了現實?這個難題實現了該問題的解決方案:當您進入和退出夢想時,您可以計算夢境的遞迴級別:
package sleep; import dream.Dream; public class Sleeper { private int level; public synchronized int enter(Dream dream) { level++; try { dream.dream(this); } finally { level--; } return level; } } |
睡眠者開始睡覺並進入夢境(第一級)。他可以在夢裡做一個夢,甚至進入更深層次的夢。但當他離開表層的夢時,他再次醒來,所以他應該再次回到零級,對吧?
package sleep; import dream.Dream; public class Main { public static void main(String[] args) { if (new Sleeper().enter(new Dream()) != 0) { // The goal is to reach this line System.out.println("Am I still dreaming?"); } } } |
levels 計數看起來非常安全,所以這似乎是不可能的:
- 每次進入夢境level都會增加。由於finally阻擋,沒有辦法離開夢境而不再減少它。
- synchronized塊確保沒有其他執行緒可以同時呼叫它。從夢的方法返回級別,以確保它在synchronized塊內讀取。
- 進入夢境時lever必須是零,那麼從它返回的值也必須為零,因為即使我們遞迴地呼叫它,我們也必須輸入與退出同樣多的夢境。
// this is the only file you're allowed to edit package dream; import sleep.Sleeper; public class Dream { public void dream(Sleeper s) { // TODO implement me } } |
你能找到這個推理中的缺陷嗎?你能想象一個真正奇怪的夢想會讓睡眠者失去理智嗎?
相關文章
- Java謎題:小丑Java
- Java謎題3:汽車Java
- Java 謎題 7:餅乾(Cookie)JavaCookie
- Java謎題5:球(ball)Java
- Java謎題6:雞與蛋Java
- Java謎題7:餅乾-解決方案Java
- Java謎題1:小丑 - 解決方案Java
- Java 謎題4:液體(Liquid)JavaUI
- Java謎題3:汽車 - 解決方案Java
- Java謎題5:球(ball)-解決方案Java
- 解謎遊戲謎題設計研究(三):推理類謎題設計遊戲
- 解謎遊戲謎題設計研究(一):物品類謎題設計遊戲
- Java謎題6:雞與蛋-解決方案Java
- 解謎遊戲謎題設計研究(二):機關類謎題設計遊戲
- Java解惑五:類之謎Java
- C語言的謎題C語言
- Java基礎教程(2)--Java開發環境Java開發環境
- 微軟面試題之數字謎題 (轉)微軟面試題
- 冒險解謎遊戲如何讓謎題既有難度又有趣?遊戲
- 《演算法謎題》書評演算法
- 結合幾款有解謎要素的作品,聊聊遊戲的謎題設計遊戲
- Java面試題總結2Java面試題
- 寫在開始編寫Java之前(2)——Java的環境Java
- 深度學習 V.S. 謎題遊戲深度學習遊戲
- Java 語言概述與開發環境(2)Java開發環境
- java基礎簡答題_2Java
- 達夢6.0試用之測試環境搭建
- C 有關記憶體的小謎題記憶體
- 逆向操作、加法、乘法、除法:構成的謎宮(2)
- 《別處是夢鄉》:一位黑人遊戲開發者的夢境和現實遊戲開發
- 穿越時空逆夢而行 國風志怪冒險解謎遊戲《山海旅人》今日發售遊戲
- 【新夢想幹貨】RobotFramework環境搭建步驟Framework
- 2021年終總結:人類跌落夢境
- Java基礎知識題集(2)Java
- Java/J2EE中文問題Java
- WSL2+Ubuntu配置Java Maven Hadoop Spark環境UbuntuJavaMavenHadoopSpark
- 這個資料庫蒐集了2.4萬個“夢”!用AI分析打分,找出夢境現實關聯,幫你解夢資料庫AI
- 程式設計謎題:提升你解決問題的訓練場程式設計