JS循环语句

第1关:while类型
任务描述
质数的定义如下:大于1的自然数,且除了1和本身外没有别的因数。如2、3、5、7。
本关任务:利用循环结构求质数的和。
相关知识
在选择结构中,条件会被测试一次,成立则执行if内语句,结束后回到主线执行下一条语句。循环结构在执行结束后会再次判断条件是否成立,这样一直重复下去直到条件不成立。
本关将介绍while型循环结构。
while类型
while类型的循环结构如下:
while(条件表达式)
{
//条件成立执行里面的语句
}
和条件语句一样,循环语句先判断条件表达式是否成立,如果成立,执行大括号内部的语句块;如果不成立则直接跳过循环体。如下:
在这里插入图片描述
语句块执行结束后,再次回到条件表达式,判断表达式是否成立,成立则执行大括号内语句块,不成立执行循环体外下一句。这个过程会一直重复进行,直到条件表达式不再成立为止,也就是说,大括号内的语句块有可能被执行多次。
在执行大括号内的语句块的过程中,条件表达式内的某些变量的值会被改变,等到下一次执行的时候条件表达式有可能不再成立。这样循环会在有限的次数内结束。
输出100以内的偶数的例子:
var i = 0;
while(i <= 100) {
console.log(i);
i = i+2;//条件表达式里面变量i的值改变了
}
在上面的例子中,条件表达式中的i变量会在循环体内被加上2,这样总会在某个循环时,条件表达式不再成立,循环结束。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
求出小于等于整数a的所有质数;
计算并返回所有这些质数的和;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的DoWhile.js;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
20
预期输出:
77
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:

function mainJs(a) {
    a = parseInt(a);
	//请在此处编写代码
	/********** Begin **********/
    var sum=0;
    var i=2;
    while(i<=a){
        var j=2;
        while(j<i){
            if(i%j==0){
                break;
            }
            j++;
        }
        if(j==i){
            sum+=i;
        }
        i++;
    }
    return sum;
	/********** End **********/
}

第2关:do while类型
任务描述
本关任务:完成一个函数,用于计算两个参数之间的所有整数的和。
相关知识
上一关介绍的while型循环结构又被成为“当”型循环结构,本关将介绍“直到”型循环结构:do while。
do while类型
do whle类型会在循环体的末尾判断条件表达式是否成立,也就是说,循环体内的语句至少会执行一次。结构如下:
do
{
//循环体内的语句
}
while(条件表达式);
第一遍循环体内的语句执行结束后,检测条件表达式的返回值,如果返回true将会第二次执行循环体,返回false结束循环,如下:
在这里插入图片描述
还是第一关中的例子,输出100以内的偶数,我们换一种解决方案:
var i = 0;
do{
console.log(i);
i = i+2;
} while(i <= 100);
这种do while循环适合用在循环体至少会被执行一次的场景。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
求出并返回参数a和b之间的所有整数的和,不包括这两个端点;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的DoWhileFunction.js;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
1,5
预期输出:
9
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:

function mainJs(a,b) {
    a = parseInt(a);
    b = parseInt(b);
	//请在此处编写代码
	/********** Begin **********/
    var i=a;
    var sum=0;
   do{
       i++;
       if(i<b){
           sum+=i;
       }
   }while(i<b);
    return sum;
	/********** End **********/
}

第3关:for类型
任务描述
定义“倒数”如下:把一个数的各位的顺序颠倒,如1234的“倒数”是4321。
本关任务:求一个数的“倒数”。
相关知识
while和do while的一个缺点是循环的次数不够直观,需要通过计算表达式何时返回false确定。JavaScript提供了新的循环结构:for型,这种结构把条件表达式和循环次数并列书写,便于控制循环次数。
for型
for型循环的结构如下:
for(初始化;条件表达式;修改值)
{
//条件表达式成立执行的语句块
}
初始化、条件表达式、修改值都操作控制循环次数的变量,初始化对该变量赋一个初值,紧接着执行条件表达式,如果返回true则进入循环体内,否则直接跳过循环体。如下:
在这里插入图片描述
循环体内执行结束后,修改值操作会修改变量的值,紧接着再次执行条件表达式,根据返回值决定是否进入循环体,这个步骤会一直重复进行下去,直到条件表达式返回false,循环结束。
初始化只执行一次,条件表达式在每一次进入循环体之前执行,修改值在每次执行完循环体之后进行。这三个式子都可以没有,但是整个括号内必须有两个分号。
还是以上一关中的输出小于等于100的偶数为例子:
for(var i = 0;i <= 100;i+=2) {
console.log(i);
}
与上一关不同的是,这里变量i的初始化和增加都是在括号内,循环体内只有一句。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
计算并返回整数a的“倒数”;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的ForIn.js;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
1234
预期输出:
4321
测试输入:
78
预期输出:
87
海到无边天作岸,山登绝顶我为峰。 —— 林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:

function mainJs(a){
    a = parseInt(a);
	//请在此处编写代码
	/********** Begin **********/
    a=a.toString();
    var num="";
    for(var i=0;i<a.length;i++){
        num+=a[a.length-i-1];
    }
    return num;
	/********** End **********/
}

第4关:for in类型
任务描述
苹果apple有多个属性表示它的产地,比如locationProvince表示省份,这些属性都以location开头,和产地无关的属性都不以location开头。
本关任务:完成一个计算苹果产地的函数。
相关知识
for in型
JavaScript的for in循环主要用于枚举对象的可枚举属性名,可枚举属性的定义请参考《JavaScript学习手册四:JS对象》。
对象类型是键值对的集合,键指的是属性的名字,值指的是属性的值。
for in除了枚举对象自己拥有的可枚举属性外,还会枚举继承的可枚举属性。
var orange = {
color:“orange”,
weight:200,
location:“GanZhou”,
date:“October”
};
for(var att in orange) {
console.log(att);//依次输出color,weight,location,date
}
注意:上述代码中,att 是临时变量,可以是其他名称。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
求出apple对象所有表示产地的属性的值(这些值都是字符串),然后拼接这些值,并返回;
注意我们有可能通过参数a和b给apple添加新的表示产地的属性,也有可能修改已有的属性的值,所以不要投机取巧哦;
提示:a.indexOf(“location”)的结果如果为0,表示字符串a以location开头;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的ForInFunction.js;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
locationCounty,米脂县
预期输出:
陕西省榆林市米脂县
海到无边天作岸,山登绝顶我为峰。 —— 林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:

var apple = {
    weight:"200克",
    level:"特级",
    locationProvince:"陕西省",
    locationCity:"榆林市"
}
function mainJs(a,b){
    apple[a]= b;
	//请在此处编写代码
	/********** Begin **********/
    var result="";
    for(var x in apple){
        if(x.indexOf("location")==0){
            result+=apple[x];
        }
    }return result;
    
	/********** End **********/
}

第5关:break和continue的区别——break
任务描述
本关任务:求数组中的质数。
相关知识
前四关介绍了四种循环结构,这些结构都是建立在已知循环次数的基础上。在很多情况下,不能确定循环次数,即循环会在进行到满足某个特定的条件时结束。比如,当数组中出现第二个整数0时,结束元素的输出。这些情况下就需要使用break和continue关键字帮助结束循环。本关介绍关键字break。
break
break的作用是跳出循环,跳过循环体内break下面的所有语句以及剩余的所有循环,而直接执行循环体外下面的第一句。break通常和if条件语句一起使用,表示满足该条件时结束循环。
for(;😉
{
if(条件语句) break;
}
//满足条件时直接跳到这里执行
下面的例子输出一个数组,当遇到数组中第一个负数时,结束输出。
//下面的整个程序将依次输出12,23,满足条件直接执行我这里!
var arr = [12,23,-1,45,2,0,-1];
for(var i = 0;i < arr.length;i++) {
if(arr[i] < 0) break;
console.log(arr[i]);
}
console.log(“满足条件直接执行我这里!”);
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
返回数组arr中第一个质数;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的BreakContinue;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
9,8,4,1,2
预期输出:
2
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:

function mainJs(a) {
    var arr = a.split(",");
    for(var k = 0,length = arr.length;k < length;k++) {
        arr[k] = parseInt(arr[k]);
    }
	//请在此处编写代码
	/********** Begin **********/
    for(var i=0;i<length;i++){
      var b=arr[i];
	  var j=2;
	 for(var j=2;j<b;j++){
		 if(b%j == 0) break;
	 }
	  if(b==j){
		  break;
	  }
	}return arr[i];
    
	/********** End **********/
}

第6关:break和continue的区别——continue
任务描述
本关任务:计算数组中所有正数或者所有负数的和。
相关知识
上一关介绍了关键字break的使用,continue是一个和break含义十分接近的关键字,本关将详细剖析continue的用法。
continue语句
continue的作用是结束本次循环,即循环体内continue下面的语句不再执行,直接进入下一个循环周期。
比如上一关的例子中,原要求是遇到第一个负数时结束输出。现在把要求改成:输出数组中的所有正数。这个时候就需要用到continue语句。
//只输出所有的正数,程序将依次输出12,23,45,2
var arr = [12,23,-1,45,2,0,-1];
for(var i = 0;i < arr.length;i++) {
if(arr[i] <= 0) continue;
console.log(arr[i]);
}
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
a是一个数字数组,b是非零整数;
如果b为正数,计算a中所有正数的和;如果b是负数,计算a中所有负数的和;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的BreakContinueFunction.js;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例(分号前面是数组a,分号后面是b):
测试输入:
-2,1,4,6,-1;1
预期输出:
11
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:

function mainJs(a,b) {
    a = a.split(",");
    for(var i = 0,length = a.length;i < length;i++) {
        a[i] = parseInt(a[i]);
    }
    var sum = 0;
    for(var i = 0,length = a.length;i < length;i++) {
	//请在此处编写代码
	/********** Begin **********/
    if(b>0&&a[i]<0){
        continue;
    }
    if(b<0&&a[i]>0){
        continue;
    }
	/********** End **********/
        sum += a[i];
    }
    return sum;
}
### 基于 Spring Boot 的五子棋对战系统架构分析 #### 1. 系统整体架构概述 基于 Spring Boot 的五子棋对战系统可以分为以下几个主要模块:WebSocket 实时通信、业务逻辑处理、数据持久化以及前端交互。整个系统的核心在于实时通信机制的设计,确保两名玩家能够同步操作并及时获取对方的动作反馈。 为了实现上述功能,通常采用分层架构模式,具体包括表现层(Presentation Layer)、服务层(Service Layer)和数据访问层(Data Access Layer)。以下是各部分的功能描述: - **表现层**:负责与用户的交互,主要包括 WebSocket 接口定义及消息传输协议设计。 - **服务层**:提供核心业务逻辑支持,例如房间管理、落子校验、胜负判断等[^3]。 - **数据访问层**:完成数据库的操作,存储用户信息、游戏记录等内容。 --- #### 2. Websocket 实现细节 Websocket 是该系统的键技术之一,用于实现实时双向通信。当两位玩家加入同一个房间后,通过 WebSocket 协议保持连接状态,并传递必要的信息,如落子位置、胜负结果等。 ##### 用户在线状态管理 `OnlineUserManager` 类被用来维护当前在线用户的集合及其对应的 WebSocket Session ID。每当有新用户登录或者退出时,都会更新此列表以反映最新的在线情况[^4]。 ##### 数据封装结构 对于每条 WebSocket 请求或应答,都需将其序列化为 JSON 格式的对象以便解析。这里引入了 `MatchRequest` 和 `MatchResponse` 两个 POJO 类型分别代表客户端发起的消息体和服务端返回的结果集。 ```java // 客户端向服务器发送的请求模型 @Data public class MatchRequest { private String message; } // 服务器回应给客户端的信息模板 @Data public class MatchResponse { private boolean ok; private String reason; private String message; } ``` --- #### 3. 游戏逻辑控制流程 在实际运行过程中,程序按照如下顺序执行各项任务: - 当两人都准备好之后才允许正式开始比赛; - 每次轮到某个角色行动前先验证其合法性——即确认是否处于己方回合内; - 将最新一步动作广播至另一名参与者那里使其界面随之变化; - 若发现满足条件组合则立即宣布结束并通知胜者身份;否则继续循环直到有人认输为止。 于如何检测是否存在连续五个相同颜色棋子的情形,可参阅下面给出的一段伪代码片段作为参考依据[^2]: ```java for (int c = col - 4; c <= col; c++) { try { if ( board[row][c] == chess && board[row][c + 1] == chess && board[row][c + 2] == chess && board[row][c + 3] == chess && board[row][c + 4] == chess ) { return chess == 1 ? user1.getUserId() : user2.getUserId(); } } catch (ArrayIndexOutOfBoundsException e) {} } ``` --- #### 4. 数据库设计方案 考虑到长期保存历史战绩的需求,在项目初期就需要规划好相应的表单布局方案。一般建议至少创建三张表格来覆盖不同方面的需求: | 表名称 | 字段说明 | |--------------|--------------------------------------------------------------------------| | users | 存储注册账户基本信息,像用户名密码之类的字段 | | matches | 记录已完成的比赛详情,包含时间戳、参赛人员ID号及相统计数值 | | moves_history| 描述每一手走法的具体坐标参数 | 利用 MyBatis 工具简化 SQL 查询语句编写工作量的同时还能增强跨平台兼容能力. --- #### 5. 性能优化策略 随着并发数量增加可能会面临性能瓶颈问题,因此有必要采取一些措施加以缓解压力。比如可以通过 Redis 缓存频繁读取的数据减少磁盘I/O次数;另外也可以考虑将复杂运算卸载到独立进程里去异步完成从而提高主线程响应速度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值