网页益智游戏怎么制作_休息一下,或者:如何使用Java 12制作出色的益智游戏...
網頁益智游戲怎么制作
Java 12以實驗形式提供了switch表達式以及switch和break語句的新形式。 對于可能很少用到的構造,有大量的新語法和語義-當然,對于那些困惑者和認證考試問題的作者來說,這是一件了不起的禮物。 如果您喜歡Java拼圖游戲,并且可能想自己創建一些游戲,請繼續閱讀。
Java 12表達式開關
Java的12只引入了一個表達切換 -a版本的switch是一個表達式,而不是一個聲明。 這是一個簡單的示例:
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }; public static int numLetters(Day day) {return switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY -> 7;case THURSDAY, SATURDAY -> 8;default -> 9;}; }真好。
請注意,這種形式的switch是一個表達式 。 在這種情況下,它的值是return語句中的表達式。 您還可以將switch表達式分配給變量,將其作為方法參數傳遞,并執行Java中的表達式可以執行的所有其他操作。
該圖簡要說明了它:
| 表達 | 聲明 | |
| 雙向分支 | ? : | if / else |
| 多路分支 | switch | switch |
為多向分支表達式指定一個運算符會更加一致嗎? 當然可以,但是……插入邪惡的笑聲……這樣我們就可以做更好的益智游戲!
前進。 試試看。 您在哪里可以使用表達式? 當然在switch語句中。
switch (switch (...) { case ... -> ...; case ... -> ... }) {case ...: ...; case ...: ...; }填寫一些有趣的內容...然后詢問結果是什么。 還要選擇“它不會編譯”。 (這就是答案。請注意表達式switch的第二個case分支中缺少的分號。)
此表達式switch具有顯著的功能: 不會掉線 。 您不必在每個case分支的末尾都放個break 。
太好了-缺少break是一個常見錯誤。 但是對于益智游戲制造商來說,這似乎是倒退了一步。
別失望 我要給你帶來好消息。
價值突破
假設您要在分支之一中記錄某些內容。
case TUESDAY -> { logger.info("Belgium?"); 7 } // Not legal Java那是Scala語法。 在Scala中,塊是一個表達式,其值是該塊的最后一個表達式。 在此示例中,為7。但是Java沒有塊表達式。
Java 12(其版本號使我們想到了圣誕節的12個夜晚),帶有一個給拼圖游戲者的禮物:一個新的break聲明。 它的目的是從case分支的一個塊中返回一個值:
case TUESDAY -> { logger.info("Belgium?"); break 7; }順便說一句, ->專門用來提醒您lambda表達式。 在lambda表達式中,您有類似的問題。 假設您有一個產生表達式的lambda表達式。
Runnable task = () -> 42;現在,您想添加一個日志記錄調用。 您做的事情很相似:
| 表達 | 聲明 | |
| 拉姆達 | Runnable r = () -> 42; | Runnable r = () -> { logger.log(...); return 42; }; |
| case分支 | case ... -> 42; | case ... -> { logger.log(...); break 42; } |
順便說一句,老鷹眼的讀者會注意到,該表的一個象限中沒有末端分號。 更多益智游戲材料…
這個break語句確實像return 。 它可以嵌套在另一個塊中,然后跳到外面,產生值。
case ... -> { if (n % 2 == 0) break 42; else { logger.log(...); break 21; } }當然,在loop和switch語句中, break含義已經不同。 例如,這是非法的:
case ... -> {for (int i = 0; i < a.length; i++) {if (a[i] == x) break i; // Error}break -1; }值break與return完全相同,但在內部循環和switch語句中除外,這是禁止的。 繼續吧-立即解決這個問題。 你知道你想。
標記的休息
早在1995年,Java 1.0就引入了諸如類和接口,垃圾回收和Unicode字符串之類的創新,同時堅持使用C語言語法來編寫許多程序員熟悉的控制結構。 除了一個小變化。
在Java中,您可以使用帶標簽的 break中斷嵌套循環,并到達循環的結尾 ,該循環的開頭具有匹配的標簽。 像這樣:
int i = 0; int j = 0; found: while (i < a.length) {while (j < a[i].length) {if (a[i][j] == x) break found;j++;}i++; } // Execution continues here after break found;您曾經使用此功能嗎? 如果沒有,請不要擔心。 除了認證考試,很少有人參加。
如果您在帶有break foo;的case有一個循環,該怎么辦? ? 這完全取決于。 如果foo作為封閉循環的標簽出現,則有一個標記為break的標簽。 如果不是,并且foo是一個變量,則您有一個break值。 如果你們兩個都有呢? 那是語法錯誤。
繼續,做一個令人困惑的事情。 你知道你想。
箭頭開關語句
再看看表達式switch語法。 你可以說
case MONDAY, FRIDAY, SUNDAY ->代替
case MONDAY: case FRIDAY: case SUNDAY:很好-替代方法看起來很奇怪:
case MONDAY -> case FRIDAY -> case SUNDAY -> // Just kidding表情switch真是太好了。 沒有失敗。 無需重復case 。 switch語句變得令人羨慕。
因此,Java設計師決定變得不錯,并允許它參與其中。 您現在可以編寫:
switch (day) {case MONDAY, FRIDAY, SUNDAY -> // No repeating of casenumLetters = 6; // No fallthrough after ->case TUESDAY -> { logger.info("Tuesday"); numLetters = 7; } case THURSDAY, SATURDAY -> numLetters = 8; default -> numLetters = 9; }頑皮開關表達式
現在該輪到表情switch 。 現在switch語句有兩種形式:頑皮(1970年左右)和nice(2018年)。 如果表情switch想要調皮,會跌倒怎么辦?
這是2 x 2圖的謬誤出現的地方:
| 表達 | 聲明 | |
| 沒有失敗 | int numLetters = switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY -> 7;case THURSDAY, SATURDAY -> 8;default -> 9; }; | switch (day) {case MONDAY, FRIDAY, SUNDAY ->numLetters = 6;case TUESDAY -> {logger.info("Tuesday");numLetters = 7;}case THURSDAY, SATURDAY ->numLetters = 8;default ->numLetters = 9; } |
| 跌倒 | ??? | switch(day) {case MONDAY, FRIDAY, SUNDAY:numLetters = 6;break;case TUESDAY:logger.info("Tuesday");numLetters = 7;break;case THURSDAY:logger.info("Thursday"); case SATURDAY:numLetters = 8;break;default:numLetters = 9; } |
我們真的需要填寫缺失的象限嗎?
顯然是的。
int numLetters = switch(day) {case MONDAY, FRIDAY, SUNDAY:break 6;case TUESDAY:logger.info("Tuesday");break 7;case THURSDAY:logger.info("Thursday"); // Fallthroughcase SATURDAY:break 8;default:break 9; };您可以在同一switch混合case ...:和case ... ->嗎? 可悲的是沒有。 曾經有人考慮過這一點,但是反益智游戲游說組織了這一天。
您可以為第一個分支執行case MONDAY: case FRIDAY: case SUNDAY:嗎? 您可以為此感到困惑,但是到那時,您的聽眾可能已經失去了生存的意愿。
為您準備的圣誕節前益智游戲
當我對所有這些進行演講時,我知道我必須做一個困惑者。 這個開關調皮還是不錯? 它有什么作用?
int n = 0;n = switch (n) {case 0:n++;default: {O:while (n > 0) {if (n == 1) break O;n--;}if (n > 0) break n;elsebreak 0;}};翻譯自: https://www.javacodegeeks.com/2018/12/give-me-break-make-awesome-puzzlers.html
網頁益智游戲怎么制作
總結
以上是默认站点為你收集整理的网页益智游戏怎么制作_休息一下,或者:如何使用Java 12制作出色的益智游戏...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓给苹果传文件用什么软件(安卓给苹果传
- 下一篇: Java连接SQL Server类MyD