网页益智游戏怎么制作_休息一下,或者:如何使用Java 12制作出色的益智游戏...

网页益智游戏怎么制作

Java 12以实验形式提供了switch表达式以及switchbreak语句的新形式。 对于可能很少用到的构造,有大量的新语法和语义-当然,对于那些困惑者和认证考试问题的作者来说,这是一件了不起的礼物。 如果您喜欢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;
}

breakreturn完全相同,但在内部循环和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真是太好了。 没有失败。 无需重复caseswitch语句变得令人羡慕。

因此,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;}};
  1. 语法错误
  2. 有无限循环
  3. n设置为0
  4. n设为1

翻译自: https://www.javacodegeeks.com/2018/12/give-me-break-make-awesome-puzzlers.html

网页益智游戏怎么制作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java aes 解密 文件_Java AES文件加解密

转自&#xff1a;http://www.webtag123.com/java/4049.htmlAESUtils.javapackage demo.security;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.security.Key;imp…

JavaScript(JS)的习惯写法总结

//取整 parseInt(a,10); //Before Math.floor(a); //Before a>>0; //Before ~~a; //After a|0; //After//四舍五入 Math.round(a); //Before a.5|0; //After//内置值 undefined; //Before void 0; //After, 快 0[0]; //After, 略慢//内置值 Infinity; 1/0;//布尔值短写法…

java模拟连接超时_Java:使用Toxiproxy模拟各种连接问题

java模拟连接超时用Toxiproxy和Java的HttpURLConnection模拟各种连接问题&#xff0c;以查看产生了什么样的错误&#xff1a;连接超时vs.读取超时vs.连接被拒绝…。 结果&#xff1a; 系统&#xff1a;openjdk 11.0.1 2018-10-16 (.setConnectTimeout 1) > java.net.Socke…

java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

《尸家保镖》 《猛鬼出千》 《不死心灵》 《大家发财》 《灵幻少女》 《九天玄女》 《僵尸至尊》 《湘西尸王》 《尸前想后》 《魔高一丈》 《一世好命》 《妖兽尸王》 《人蝎大战》 《星际钝胎》 《艳女还魂》 《邪完再邪》 《艳鬼山坟》 《尸破今天阳光很好&#xff0c;坐在窗…

正则表达式中的分组的匹配次数的理解

正则表达式&#xff1a;/((\d){1,6})/ 这个正则表达式可以匹配任意数量的数字。 限定符 指的是前面的子表达式 (\d){1,6} 可以出现 1 次或者多次&#xff0c;所以如果是贪婪匹配&#xff0c;每次迭代匹配的数字个数可以超过 6 个&#xff08;即 ≥1&#xff09;&#xff1b;如…

aws使用技巧_AWS:避免那些“神圣的法案”时刻的一些技巧

aws使用技巧云非常棒&#xff1a;几乎100&#xff05;的可用性&#xff0c;接近零的维护&#xff0c;按需付费&#xff0c;最重要的是&#xff0c;它具有无限的可扩展性。 但是最后两个很容易把你咬回去&#xff0c;把那令人敬畏的事情变成一场噩梦。 偶尔您会看到类似的故事…

JAVA类和对象访问_Java类和对象

一、类类是封装对象的属性和行为的载体&#xff0c;在Java语言中对象的属性以成员变量的形式存在&#xff0c;而对象的方法以成员方法的形式存在。1. 类的构造方法构造方法是一个与类同名的方法&#xff0c;对象的创建就是通过构造方法完成的&#xff0c;构造方法分为有参构造方…

扩展方法 枚举值_扩展枚举功能的两种方法

扩展方法 枚举值前言 在上一篇文章中&#xff0c;我解释了如何以及为什么在Java代码中使用enums而不是switch/case控制结构。 在这里&#xff0c;我将展示如何扩展现有enums功能。 介绍 Java enum是一种编译器魔术。 在字节码中&#xff0c;任何enum都表示为扩展抽象类java.la…

正则表达式中关于字符集的问题

/[abc]/&#xff0c;匹配1或者多个方括号中的任意字符&#xff0c;方括号中的字符是“或者”的关系&#xff0c;等价于 /(a|b|c)/ /(abc)/&#xff0c;匹配1个或者多个 abc&#xff0c;abc 是一个整体&#xff0c;如下图所示&#xff1a; /[0-9|_|-]/&#xff0c;匹配由数字…

spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入

spring 构造函数注入欢迎使用Spring Dependency Injection –字段&#xff0c;设置器&#xff0c;构造函数注入教程。 了解场注入 &#xff0c; 二传手注入和构造函数注入之间的区别。 借助代码示例&#xff0c;我们将看到使用每个示例的好处以及为什么选择一个而不是另一个。 …

java 快速io_Java编程在ICPC快速IO实现源码

本文将介绍Java在ICPC快速IO实现方法&#xff0c;下面看看具体代码。不处理EOF&#xff1a;import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Arrays;import java.util.Random;import java.io…

adf开发_如何在ADF中将参数传递给ActionListener

adf开发在某些情况下&#xff0c;需要将值传递给ADF Button的ActionListener。 可以由actionListeners调用的方法只有一个ActionEvent类型的参数。 因此&#xff0c;我将解释如何将参数传递给该bean方法&#xff0c;但是它在方法签名中仅包含一个参数ActionEvent。 我在页面…

JavaScript/JS的学习

文章目录JavaScript 简介JavaScript 发展史ECMAScript基本语法与 HTML 结合方式数据类型类型转换非 number 转成 number非 boolean 转成 boolean特殊语法变量运算符双等号&#xff08;&#xff09;全等号&#xff08;&#xff09;流程控制语句switch...casewhilefor 循环对象Fu…

java soap协议头_自己调用webservice方法总结(带请求头SoapHeader)

调用webservice总结&#xff1a;1.加入第三方的jar包 Ksoap2-android-XXX2.访问响应的webservice的网站&#xff0c;查看响应的信息&#xff0c;得到nameSpace&#xff0c;methodName&#xff0c;url&#xff0c;soapAction3.如果request信息还有带有SoapHander的。那么就要封装…

注册界面演示代码(前端开发)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册</title><style>* {margin: 0px;padding: 0px;/*这样的设置会阻止元素大小的改变&#xff0c;因为设置内边距时元素大小会发生改变*/b…

apache ignite_使用Apache Ignite瘦客户端– Apache Ignite内部博客

apache ignite从2.4.0版本开始&#xff0c;Apache Ignite引入了一种连接到Ignite群集的新方法&#xff0c;该方法允许与Ignite群集进行通信而无需启动Ignite客户端节点。 从历史上看&#xff0c;Apache Ignite提供了客户端和服务器节点两个概念。 点燃旨在用作轻量级模式的客户…

java 网络编程 方式_JAVA网络编程

概念BIO 阻塞io&#xff0c;1.4之前NIO no-blocking io 非阻塞io&#xff0c;jdk1.4AIO 异步io&#xff0c;jdk1.7浏览器输入网址&#xff0c;敲下回车之后发生了什么&#xff1f;1.URL解析2.DNS解析概念&#xff1a;Domain Name System&#xff0c;域名系统&#xff0c;本质…

如何设置背景图(前端开发)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模糊化背景图</title><style>body {background-image: url("image/bjt03.jpg");background-repeat: no-repeat;background-atta…

java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

Java基础之字符串操作——String字符串什么是字符串&#xff1f;如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列。为了更好的理解以上的理论&#xff0c;我们先来解释下字符序列&#xff0c;字符序列&#xff1a;把多个字符按照一定的顺序排列起来&#xff1…