while循环嵌套,不满足外层循环条件时跳出内层循环

js开发过程中遇到的问题 同时被 2 个专栏收录
4 篇文章 0 订阅
14 篇文章 0 订阅

1 情形描述

这里使用while双层循环时踩的炕,

描述:双层while循环时,想在不满足外层循环条件时跳出内层循环

上面代码中的第二个方法中,如果内层循环中两个while循环不添加条件left<right。使用debug的时候,当left指向t,right指向c时,此时,满足外层条件,会进入外层while循环体,执行循环体;内层循环的第一个while作用是,从left开始寻找下一个元音字母,执行这个while循环,当left指向c,此时right仍指向c,此时不满足外层循环条件left< right ,但是还会执行循环体,直到找到下一个元音字母为止或者最后;然后进入外层循环体中的第二个while循环,与上同理

2 解决方法

在内层也加上外层循环的这个条件

//注意这里外层while循环的条件在进入循环体之后就不能作为内层循环条件
//方法二 实现字符串中元音字符的反转
function reverseVowels(str) {
    let vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
    let strToArr = str.split('');
    let left = 0;   //左指针,从左开始遍历
    let right = strToArr.length - 1; //右指针
    let temp;
    while(left < right){
        while (vowels.indexOf(strToArr[left]) === -1 && left < right){  //从left开始向右寻找第一个元音字母
            /*如果这里不设置left< right,将会得到想象不到的结果
            因为这里不设置这个条件,那么开始的时候,left< right,会满足外层循环条件,进入循环体
            但在内层循环的时候,可能会出现left>right,虽然不满足外层条件,但是还是会执行内层循环体
            * */
            //原因:因为满足外层循环条件之后,必须会执行外层循环体一次,之后才会再判断条件
            left++;
        }
        while (vowels.indexOf(strToArr[right]) === -1 && left < right){ //从right开始向左寻找第一个元音字母
            right--;
            //continue;
        }
        temp = strToArr[left];
        strToArr[left] = strToArr[right];
        strToArr[right] = temp;
        left++;
        right--;
    }
    return strToArr.join('');
}

let rel = reverseVowels('leetcode');
console.log(rel)

百里于2020年4月24日

如果有错,请您指出!如有侵权,请联系我删除!

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值