JavaScript中的循环语句

2022/7/28 14:33:59

本文主要是介绍JavaScript中的循环语句,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

循环的概念

重复的执行一段的代码,避免死循环,提高效率(时间复杂度(主要关注) 空间复杂度(不关注)),循环包含三大语句:while语句、do while语句、for语句。

循环的三要素

  • 初始值(初始的变量值)
  • 迭代量(基于初始值的变化)
  • 条件(基于初始值的判断)

while语句

while(条件表达式(返回true和false)){
  执行的代码
}
var 初始值变量 = 值
while(条件){
  迭代量
  执行的代码
}

 

eg:(循环打印1~10)

var i = 1
while(i<=10){
    console.log(i)
    i++
}

eg:(1+2+...+100)

// 1加到100
var number = 0
var sum = 0
while(number<100){
    number++
    sum += number
}
console.log(sum);
//100加到1
var i = 100
sum = 0
while(i>=1){
    sum += i
    i--
}
console.log(sum);

do while (与while唯一的区别是先做 后判断 (说明至少走了一次))

do{
  执行的代码
}while(条件)
var 初始值 = 值
do{
    执行的代码
    迭代量变化
}while(条件)

eg:上厕所

var isEmpty = true
do{
    console.log('有人不')
    isEmpty = false
}while(isEmpty)

eg:1+2+...+100

var i = 0
var sum = 0
do{
    i++
    sum+=i
}while(i<100)

while和do while的区别:

  1. while是先判断后执行 do while是先执行后判断
  2. do while最少执行一次 while最少执行0次
  3. 常用while来写一些执行多次的内容,且最少执行次数没规定时  do while(规定必须要执行的时候)

for循环(最常用的)

for(初始值;条件;迭代量){
    //执行的代码 跟if一样如果你执行的代码只有情况下可以省略{}
}

eg:1+2+...+100

var sum = 0
for(var i=0;i<=100;i++){
    sum += i
}

***面试题:for(;;)是错误的吗?(没错!!!也就意味对应的内容可以被省略)

for(;;){
    console.log('hello')
}
//死循环 省略迭代量 和 条件 必定是死循环
var i = 0
for(;i<100;i++){
    console.log('我执行了'+i+'遍')
}
console.log(i)//100

时间复杂度(判断内容执行效率 依照次数计算)

概述:从传统意义上 对应的代码时间复杂度越低对应的执行速度越快(效率越高)

O(1) (每行只执行一遍 常数阶)

var i = 0
i++
if(i<10){
    console.log(i)
}

O(logN) (俩个值来决定 对数阶)

var i = 1 //由i和2决定
while(i<100){
    i*=2
}

O(n) (由对应的一个值决定的 线性阶)

for(var i=0;i<100;i++){
    console.log('我执行了'+i+'遍')
}

O(nlogn) (循环嵌套对应的对数阶循环 线性对数阶)

for(var i=0;i<100;i++){
    var j = 1 //由i和2决定
    while(j<100){
        j*=2
    }
}    

O(n^2) (双层循环嵌套 平方阶)

for(var i=0;i<100;i++){
    for(var j=0;j<100;j++){
        console.log('我执行了'+j+'遍')
    }
}    

时间复杂度 O(1) < O(logN) <O(n)<O(nlogn)<O(n^2)

while的时间复杂度低于for循环 (算法的优化可以使用while来替代for)

循环嵌套(将多个循环嵌套在一起)

eg:打印一个正方形

/*
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
*/
//外层控制行 内层循环控制列
var row = 4
var col = 10
for(var i=0;i<row;i++){
    var j = 0
    //每行的字符串
    var rowStr = ""
    while(j<col){
        j++
        //字符串拼接
        rowStr+='*'
    }
    document.write(rowStr+"<br/>")
}
//执行次数 外层循环次数*内层循环次数
循环嵌套最多套俩层 O(n^2)

eg:

for(var i=0;i<5;i++){
    //内层的循环条件依赖于外层
    var str = ''
    for(var j=0;j<=i;j++){
        str += '*'
    }
    document.write(str+"<br/>")
}

 

 break

break 跳出代码块 (switch 以及 循环中) 只会跳出当前break所在层的循环(这个循环会被结束)

eg:

// 1, 判断一个数是不是合数。(指自然数中除了能被1和本身整除外,还能被其他的数整除(不包括0)的数。)
var number = prompt()
//判断是否他有可以被除自身和1之外整除的数
for(var i=2;i<number;i++){
    if(number%i==0){
        console.log("当前数为合数");
        break;
    }
}
// 2, 判断一个数是不是素数。(除了1和它本身以外不再有其他的除数整除。)
//得到个数
var count = 0
for(var i=2;i<number;i++){
    if(number%i==0){
        count ++
        break;
    }
}
if(count==0){
    console.log('当前值为素数');
}

continue

continue 跳过本次循环(只能在循环内使用)循环还在继续

// 1,求整数1~100的累加值,但要求跳过所有个位为3的数。
var sum = 0 //接收对应的累加值
for(var i=1;i<=100;i++){
    if(i%10==3){
        continue //遇到continue跳过本次开始下一次循环
    }
    sum+=i
}
console.log(sum);

 

 

 关于循环的各种题:

 // 1, 一个新入职,月工资为2000元的员工,每年涨当年工资5%,20年后的月工资是多少?
        var money = 2000
        for(var num = 0;num < 20;num++){
            money *= 1 + 0.05
        }
        money = parseInt(money)
        console.log('20年后的月工资是' + money);

        //2, 山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
        // var num = 5
        var cishu = 0
        for(var start = 0;start < 35;start += 5){
            cishu++
        }
        console.log(cishu);

        // 3, 打印100–200之间所有能被3或者7整除的数
        for(var a = 100;a <= 200;a++){
            if(a % 3 == 0 || a % 7 == 0){
                console.log(a);
            }
        }


        // 4, 计算10的阶乘   (1*2*3*4*5*6*7*8*9*10   n的阶乘1*2……*n)
        var sum = 1
        for(var a = 1;a <= 10;a++){
            sum *=a
        }
        console.log(sum);

        // 5, 计算1+3+5+...+99的和
        var sum = 0
        for(a = 1;a <= 100;a++){
            if(a % 2 != 0){
                sum += a
            }
        }
        console.log(sum);

        // 6, 99乘法表

        var row = 9
        var col = 9
        for(var i = 1;i <= row;i++){
            sum = 0
            for(var j = 1;j <= i;j++){
                sum = i * j
                // console.log(i+'x'+j+'='+sum)
                document.write(j+'x'+i+'='+sum+' ')
            }
            document.write('<br/>')
        }

        var row = 9
        var col = 9
        for(var i = 1;i <= row;i++){
            // sum = 0
            str = ''
            for(var j = 1;j <= i;j++){
                // sum = i * j
                // console.log(i+'x'+j+'='+sum)
                // document.write(j+'x'+i+'='+sum+' ')
                str += j + 'x' + i + '=' + (i * j) + ' '
            }
            console.log(str);
            // document.write('<br/>')
        }

        // 7, 输出20~80之间能被3整除的整数, 每行5个
        var a = 0
        for(i = 20; i <= 80;i++){   
                
            if(i % 3 == 0){
                document.write(i + ' ')
                // console.log(i);
                a++
            }
            
            if(a % 5 ==0){
                document.write('<br/>')
            }
        }
        // 打印的方法
        var a = 0
        var srt = ''
        for(i = 20; i <= 80;i++){   
                
            if(i % 3 == 0){
                // document.write(i + ' ')
                // console.log(i);
                srt += i + '\t'
                a++
            }
            // console.log(srt);
            if(a % 5 ==0){
                // document.write('<br/>')
                srt += '\n'
            }
        }
        console.log(srt);
        // 8, 打印1000~2000年中所有的闰年, 每行4个
        var a = 0
        for(i = 1000;i <= 2000;i++){
            if(i % 4 ==0 && i % 100 !=0 || i % 400 == 0){
                document.write(i + ' ')
                a++
            }
            if(a % 4 == 0){
                document.write('<br/>')
            }
        }

        
        //打印
        str = ''
        var a = 0
        for(i = 1000;i <= 2000;i++){
            if(i % 4 ==0 && i % 100 !=0 || i % 400 == 0){
                // document.write(i + ' ')
                str += i + ' '
                a++
            }
            if(a % 4 == 0){
                // document.write('<br/>')
                str += '\n'
            }
        }
        console.log(str);


        
        // 9, 求: 1-1/2+1/3-1/4 …  1/100的和
        var sum = 0
        var sum1 = 0
        var sum2 = 0
        for(i = 1;i <= 100;i++){
            if(i % 2 != 0){
                sum1 += 1 / i
            }
            if(i % 2 == 0){
                sum2 -= 1 / i
            }
            sum = sum1 + sum2
        }
        console.log(sum);
        // 输入两个数,求两个数的最小公倍数(****)
        // 如: 9和6的最小公倍数是18, 
        //  1, 先找出两个数中的最大数   // 9 -> 6*9
        //  2, 最大数++,找出能被两个数整除的数(退出循环)
        var a = prompt()
        var b = prompt()
        var c = 0
        if(a > b){
            c = a
            console.log('最大数为' + a);
        }else {
            console.log('最大数为' + b);
            c = b
        }
        while(c){
            if(c % a == 0 && c % b == 0){
                console.log('最小公倍数为'+ c);
                break
            }
            c++
        }
        // 输入两个数n,a,如果n==3, a == 2;
        // 输出 2 + 22 + 222 的值。(不用输出式子)(****)
        // 如: n == 4, a == 3;
        // 输出 3 + 33 + 333 + 3333的值。
        // 提示: 1、n = 3,相加三次,每次相加比前一次相加的数,多一位
        //       2、每次多的这个位数的值为a,  3, 3*10+3(33), 33*10+3(333),...
        var n = prompt()
        var a = prompt()
        var sum = 0
        var str = ''
        for(i = 0;i < n;i++){
            str += a
            sum += Number(str)
        }
        console.log(sum);

        // 11, 五位数中,对称的数称为回文数,找出所有的回文数。
        // 如: 12321
        for(var i = 10000;i < 100000;i++){
            var a = parseInt(i / 10000)
            var b = parseInt(i / 1000 % 10)
            var c = parseInt(i / 10 % 10)
            var d = parseInt(i % 10)
            if(a == d && b == c){
                console.log(i);
            }
        }

        // 13, 求1!+2!+3!+4!+5! 
        var sum = 0
        for(var i = 1;i <= 5;i++){
            var sum1=1
            for(var j = 1;j <= i;j++){
                sum1 *= j
            }
            sum += sum1
        }
        console.log(sum);


        // 14, 找出所有的水仙花数,三位数,各位立方和等于该数本身。
        // 如: 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3 
        for(var i = 100;i < 1000;i++){
            var a = parseInt(i / 100)
            var b = parseInt(i / 10 % 10)
            var c = parseInt(i % 10)
            if(i == Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3)){
                console.log(i);
            }
        }
 
        // 15, 输入任意两个数,如果第一个数小,从第一个数打印到第二个数,如果第二个数小,从第二个数打印到第一个数  
        var a = prompt()
        var b = prompt()
        if(a < b){
            console.log(a + ' ' + b);
        }else{
            console.log(b + ' ' + a);
        }


        // 16,  输入两个数,求两个数的最大公约数(*****)
        // 如: 12和8的最大公约数是4,
        // 提示: 能够同时整除两个数的最大数          
        //  1, 先找出两个数中最小的那个数, 
        //  2, 最小数--, 找出能被两个数整除的数(退出循环break)

        var a = prompt()
        var b = prompt()
        var min = 0
        a < b? min =a:min=b
        for(i = min;i > 0;i--){
            if(a % i == 0 && b % i == 0){
                console.log(i);
                break
            }
        }

 



这篇关于JavaScript中的循环语句的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程