今天主要就几天前写的JS循环结构的一些补充。主要是JS循环辅助语句和循环的嵌套。今天还是主要案例为主,其中有些理论知识,希望能帮助你。
1、循环辅助语句
break:跳出所在的switch或者循环结构
案例1 素数
思路:素数:对于自然数,如果它只有1和本身之外在没有其他因子
1、提示并接受判断的数n的输入
2、在[2,n-1]之间去寻找因子
3、如果找到则设置找到标志,并提前结束
4、根据标志输出相应的结果
var n = Number(prompt("请输入一个自然数")); var m = Math.ceil(Math.sqrt(n));//根据相关数学定理,查找范围可缩小至[2,sqrt(n)] var found = false;//找到因子的标记 for(var i=2; i<=m; i++){ if(n%i == 0){ found = true; break;//找到则提前结束 } } alert(found?"不是素数":"是素数");
continue:结束本次循环,开启下一次循环。
案例2:对100以内既不是3的倍数也不是5的倍数的数的和
思路一:1、在[1,100]范围内的每个数逐个判断2、如果满足条件就累加3、输出和
思路一是常规思路,只要满足条件就往上累加,现在换另一种思路。var sum = 0; for(var n=1; n<=100; n++){ if(n%3!=0 && n%5!=0){ sum += n; } } alert(sum);
思路二:
1、在[1,100]范围内每个数重复步骤2、3
2、如果不满足条件就放过
3、累加
4、输出和
思路二的好处:结构清晰。也就是我们在进行数据处理之前,先把各种不符合条件的情况先排除。然后在处理符合条件的情况(这个一般是程序的主体部分)。var sum = 0; for(var n=1; n<=100; n++){ if(n%3==0 && n%5==0){ continue;//结束本次循环,开启下一次循环(虽然本意是继续,但在这里表示 结束本次循环) } sum += n; } alert(sum);
如果循环体的主体代码的执行有两个前提条件,常规思路是怎么写的,如果循环体主体代码较多,则该程序的可读性就较差。
使用break和continue的区别:使用break是跳出这个循环,就算之后还有代码没有运行,它也会忽略不执行;而continue会直接从半路结束本次循环,但是会开启下次循环,不像break是直接跳出了这个循环体,continue会执行之后的代码。
2、循环的嵌套为什么要有循环嵌套呢?因为一件事情的内容需要重复做,而且这个事情要反复做。
什么时候用循环的嵌套:
(1)两者没有制约关系
(2)两者有制约关系
一般有行数有列数并且两者之间存在关系的时候使用循环的嵌套。
案例1::直角三角形的输出
案例2:等腰三角形的输出for(var i=1; i<8; i++){//控制行 for(var j=1; j<i+1; j++){//控制列 document.write("*"); } document.write("</br>");//每行换行 }
案例3:输出菱形//1、定义一个等腰三角形的行数 var num = 10; //每一行的空格数为总行数减去当前是第几行 //每一行的星星个数为当前行*2-1 //循环条件行数小于等于10 for(var i=1; i<=num; i++){//控制有多少行 for(var j=num-i; j>0; j--){//控制一行中有多少空格数 document.write("*"); } for(var k=1; k<=i*2-1; k++){//控制星星个数 document.write("%"); } document.write("</br>"); }
就用这三个案例来显示使用循环的嵌套。var row = Number(prompt("请输入行数:")); for (var n=1; n<=2*row-1; n++) {//控制行数 //输出row-i是空格,输出2i-1个,输出换行 var blanks = Math.abs(row-n);//空格的个数 var stars = 2*row-1-2*Math.abs(n-row);//星号的个数 for (var i=1; i<=blanks; i++) {//控制空格 document.write("_"); } for(var i=1; i<=stars; i++){//控制星数 document.write("*"); } document.write("</br>");//给每行换行 }
通过这一系列的学习,是我觉得,计算机真的是一门综合性的技术,值得学习学习的东西非常多,所以需要更加是努力。