);
初学者最可爱的错误:
var month = parseInt(prompt("请输入月份"));
switch(month){
case 1 || 3 || 5 || 7 || 8 || 10 || 12:
alert("这个月有31天");
break;
case 4 || 6 || 9 || 11:
alert("这个月有30天");
break;
default:
alert("这个月一般来说是28天,可能是29天!");
变量i我们称为循环变量,这个变量可以任意设置,我们习惯用i来表示循环变量。
for循环:for循环就是一个壳子,能帮我们反复执行同一段代码,而且根据变量i依次的变化,每次执行的结果都不同。
语法上,最容易错误的:
系统遇见for循环结构,会立即执行语句①,此时声明了一个变量i,赋值为0
系统会立即检测,是否满足条件②这个表达式,如果是真,则执行③;如果②是假,则跳出循环,for循环结束。
执行完③,会立即执行语句④,然后再次检测语句②,如果为真,则执行③;如果为假,则跳出循环。
执行完③,会立即执行语句④,然后再次检测语句②,如果为真,则执行③;如果为假,则跳出循环。
执行完③,会立即执行语句④,然后再次检测语句②,如果为真,则执行③;如果为假,则跳出循环。
...直到条件②为假,整个循环结束。
for循环是一种前测试循环语句,在执行重复代码之前,必须先测试入口条件,只有条件为真,才能继续执行。如果为假,跳出循环不执行。
2.2 for循环例子
for循环的本质,决定了一个事情,就是你能否预测循环的结果。用20道题目练习这个知识点。
for(var i = 1 ; i < 10 ; i++){
for(var j = 1 ; j < 10 ; j++){
console.log(i + "乘" + j + "等于" + (i * j));
//break只能终止内层循环,但是我们就是想要终止外层循环,那么可以给外层循环起名字。
waiceng:for(var i = 1;i <= 10;i++){
for(var j = 1; j <= 10;j++){
console.log(i,j);
if(j == 5){
break waiceng; //可以中断外层的waiceng的for循环
3.1.2 continue关键字
continue是继续的意思。作用:打断这一次的循环,立即进入下一次循环。
呃,这个答案不是我想要的,赶紧试试下一个数字吧!
遇见continue遇见,for循环会立即执行后面的语句,然后进入下一次循环。
for(var i = 1; i <= 10;i++){
if(i == 5){
continue; //当i为5时,立即重点执行后面的console语句,进入下一次循环
console.log(i);
同样,continue只能中断当前内层循环,要中断外层循环加label(标签名)
for(var i = 1; i <= 10;i++){
for(var j = 1; j <= 10;j++){
if(j == 5){
continue; //只能中断内层的循环,外层循环还在继续
console.log(i,j);
waiceng:for(var i = 1; i <= 10;i++){
for(var j = 1; j <= 10;j++){
if(j == 5){
continue waiceng; //只能中断内层的循环,外层循环还在继续
console.log(i,j);
3.1.3 break和continue优化代码
break和continue的目的,就是优化代码性能,优化算法,提高运算效率。
寻找质数的方法:
waiceng:for(var i = 2; i <= 100;i++){
//要测试i是不是质数,之前的算法是测试i的约数个数(不包括1和自己)
//测试约数个数如果为0,那么就是质数
//凭什么我要测试约数个数?只要你有约数,你就不是质数!!!
for(var j = 2;j < i;j++){
if(i % j == 0){
continue waiceng; //如果这数字被某个数字整除了,立即放弃它开始验证下一个i。
console.log(i); //如果一个数字有约数,就会执行continue,就遇不见这个语句。
更优化的做法,可以给i开平方,少算一倍:
waiceng:for(var i = 2; i <= 100;i++){
for(var j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){
continue waiceng;
console.log(i);
continue简化输出1-10000之间的质数:
//从1~10000开始列举,一个一个检测是不是质数
waiceng:for(var i = 2; i <= 10000;i++){
//每次进来的i都要判断是否是质数,不是就跳出测试下一个
//判断这个i是不是质数,需要看看这个i的约数个数
//循环查找除了1和本身之外是否有其他的约数,如果有就直接停止这一次
//进行下一次下一个数的判断
for(var j = 2;j < i;j++){
if(i % j == 0){
//如果进入到这个位置,说明有多余的余数
//肯定不是质数,直接停止外层这一次所有的循环,进入外层下一次循环
continue waiceng;
//如果能进行到这个位置,说明从没遇见到continue
//相等于除了1和本身就没有其他约数,这个i就是质数
console.log(i);
Break简化,判断质数:
var n = parseInt(prompt("请输入一个正整数"));
// 判断是否是质数,只有两个约数
var sum = 0; //累加器累加个数
//循环累加约数个数,可以缩小列举范围,只要2到n的开方之间有任意的约数,肯定就不是质数
//如果不是质数,立即停止循环
for(var i = 2 ; i < n; i++){
if(n % i == 0){
sum++; //只要有约数就加1
break; //能进入到里面前提,在1和本身之间出现了其他约数,不是质数,别找了
// 循环结束后,sum内存的是n的约数个数,判断是否等于0
if(sum == 0){
alert("是质数");
}else{
alert("不是质数");
更优化的做法:开平方
var n = parseInt(prompt("请输入一个正整数"));
var sum = 0;
for(var i = 2 ; i <= Math.sqrt(n) ; i++){
if(n % i == 0){
sum++;
break;
if(sum == 0){
alert("是质数");
}else{
alert("不是质数");
3.2 do while语句
do while循环是一种后测试循环语句。先执行一次结构体,然后再判断入口条件,如果为真可以执行下一次,如果为假跳出循环。也是反复执行某一段代码,直到测试条件为假。
do就是做,while就是当。
注意:如果有变量参与循环体,一定要注意书写位置,如果写在结构体内,每次进入结构体都会被重置。变量定义时需要定义在循环外面。
变量自加或自减的过程,需要写在循环体之内,而且过程在输出语句前和语句后得到的结果是不一样的
这是一根后置验证语句,怎么着都会执行一次:
}while(true);
for循环是主力语句,也就是说,for做不到的,do...while也同样做不到。do...while能做到的,for也一定可以做到。
do...while语句没有循环变量适合没有循环变量的情况,经常的,它是个死循环。
var a = prompt("你到底爱不爱我吗?");
if(a == "爱"){
alert("但是我不爱你!");
break; //遇见break,终止循环
}else{
alert("回答错误,请重新输入!");
}while(true);
3.3 while语句
while语句是一个前置验证语句,其余的和do while一样的。
输出1~100;同样也可以没有补偿,自己维护一个循环变量:
var n = 1;
while(n <= 100){
console.log(n);
n++;
while语句是一个前置验证语句: