精华内容
下载资源
问答
  • Java嵌套循环在一个循环语句的循环体中再定义一个循环语句的语法结构。whiledo.while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环, Java嵌套循环格式如下:  ...

     

      Java嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。whiledo.while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环, Java嵌套循环格式如下:

      for(初始化表达式;循环条件;操作表达式){

      for(初始化表达式;循环条件;操作表达式){

      执行语句

      }

      }

      下面我们通过案例Example.java 来介绍。

      public class Example{

      public static void main(String[] args){

      int i,j; //定义两个循环变量

      for(i=1;i i++){ //外层循环

      for (j=1;j j++){ //内层循环

      System.out.print( * //打印*

      }

      System.out.print( \n //换行

      }

      }

      }

      上面程序运行结果如下:

      *

      **

      ***

      ****

      *****

      ******

      *******

      ********

      *********

      Java循环嵌套是什么意思,叩丁狼Java循环嵌套实例

      上面案例中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印 * ,每一行的 * 个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:

      第一步,在第3行代码定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。

      第二步,在第4行代码将i初始化为1,条件i =9为true,首次进入外层循环的循环体。

      第三步,在第5行代码将j初始化为1,由于此时i的值为1,条件j =i为true,首次进入内层循环的循环体,打印一个 * 。

      第四步,执行第5行代码中内层循环的操作表达式计j++,将j的值自增为2。

      第五步,执行第5行代码中的判断条件j =i,判断结果为fase,内层循环结束。执行后面的代码,打印换行符。

      第六步,执行第4行代码中外层循环的操作表达式计i++,将i的值自增为2。

      第七步,执行第4行代码中的判断条件i =9,判断结果为true,进入外层循环的循环体,继续执行内层循环。

      第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个 * 。在内层循环结束时会打印换行符。

      第九步,依此类推,在第3行会打印3个 * ,逐行递增,直到i的值为10时,外层循

      环的判断条件i =9结果为 false,外层循环结束,整个程序也就结束了。

      以上小编通过一个实例为您介绍了 java循环嵌套 以及在具体实例中java循环嵌套的具体运行过程,希望对您有所帮助。如果您在学习java中还遇到其他问题,建议您下载我们的java视频教程同步学习,或者点击咨询按钮获得我们的帮助。

     

    展开全文
  • 姐: s->next = p;s->prior = p->prior;p->prior->next = s;p->prior = s

    姐:

    s->next = p;s->prior = p->prior;p->prior->next = s;p->prior = s
    在这里插入图片描述

    展开全文
  • 有了for循环什么还要forEach?

    千次阅读 2021-12-25 01:27:01
    大家好,我是 漫步,喜欢记得关注我并设为星标哦。js中那么多循环,for for...in for...of forEach,有些循环感觉上是大同小异今天我们讨论下for循环和forEac...

    大家好,我是 漫步,喜欢记得关注我并设为星标哦。

    js中那么多循环,for for...in for...of forEach,有些循环感觉上是大同小异今天我们讨论下for循环和forEach的差异。
    我们从几个维度展开讨论:

    1. for循环和forEach的本质区别。

    2. for循环和forEach的语法区别。

    3. for循环和forEach的性能区别。

    本质区别

    for循环是js提出时就有的循环方法。forEach是ES5提出的,挂载在可迭代对象原型上的方法,例如Array Set Map
    forEach是一个迭代器,负责遍历可迭代对象。那么遍历迭代可迭代对象分别是什么呢。
    遍历:指的对数据结构的每一个成员进行有规律的且为一次访问的行为。
    迭代:迭代是递归的一种特殊形式,是迭代器提供的一种方法,默认情况下是按照一定顺序逐个访问数据结构成员。迭代也是一种遍历行为。
    可迭代对象:ES6中引入了 iterable 类型,Array Set Map String arguments NodeList 都属于 iterable,他们特点就是都拥有 [Symbol.iterator] 方法,包含他的对象被认为是可迭代的 iterable

    8cfe5c4dcd5281b61667554234a0ff1d.png

    在了解这些后就知道 forEach 其实是一个迭代器,他与 for 循环本质上的区别是 forEach 是负责遍历(Array Set Map)可迭代对象的,而 for 循环是一种循环机制,只是能通过它遍历出数组。
    再来聊聊究竟什么是迭代器,还记得之前提到的 Generator 生成器[1],当它被调用时就会生成一个迭代器对象(Iterator Object),它有一个 .next()方法,每次调用返回一个对象{value:value,done:Boolean}value返回的是 yield 后的返回值,当 yield 结束,done 变为 true,通过不断调用并依次的迭代访问内部的值。
    迭代器是一种特殊对象。ES6规范中它的标志是返回对象的 next() 方法,迭代行为判断在 done 之中。在不暴露内部表示的情况下,迭代器实现了遍历。看代码

    let arr = [1, 2, 3, 4]  // 可迭代对象
    let iterator = arr[Symbol.iterator]()  // 调用 Symbol.iterator 后生成了迭代器对象
    console.log(iterator.next()); // {value: 1, done: false}  访问迭代器对象的next方法
    console.log(iterator.next()); // {value: 2, done: false}
    console.log(iterator.next()); // {value: 3, done: false}
    console.log(iterator.next()); // {value: 4, done: false}
    console.log(iterator.next()); // {value: undefined, done: true}

    我们看到了。只要是可迭代对象,调用内部的 Symbol.iterator 都会提供一个迭代器,并根据迭代器返回的next 方法来访问内部,这也是 for...of 的实现原理。

    let arr = [1, 2, 3, 4]
    for (const item of arr) {
        console.log(item); // 1 2 3 4 
    }

    把调用 next 方法返回对象的 value 值并保存在 item 中,直到 donetrue 跳出循环,所有可迭代对象可供for...of消费。再来看看其他可迭代对象:

    function num(params) {
        console.log(arguments); // Arguments(6) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
        let iterator = arguments[Symbol.iterator]()
        console.log(iterator.next()); // {value: 1, done: false}
        console.log(iterator.next()); // {value: 2, done: false}
        console.log(iterator.next()); // {value: 3, done: false}
        console.log(iterator.next()); // {value: 4, done: false}
        console.log(iterator.next()); // {value: undefined, done: true}
    }
    num(1, 2, 3, 4)
    
    let set = new Set('1234')
    set.forEach(item => {
        console.log(item); // 1 2 3 4
    })
    let iterator = set[Symbol.iterator]()
    console.log(iterator.next()); // {value: 1, done: false}
    console.log(iterator.next()); // {value: 2, done: false}
    console.log(iterator.next()); // {value: 3, done: false}
    console.log(iterator.next()); // {value: 4, done: false}
    console.log(iterator.next()); // {value: undefined, done: true}

    所以我们也能很直观的看到可迭代对象中的 Symbol.iterator 属性被调用时都能生成迭代器,而 forEach 也是生成一个迭代器,在内部的回调函数中传递出每个元素的值。
    (感兴趣的同学可以搜下 forEach 源码, Array Set Map 实例上都挂载着 forEach ,但网上的答案大多数是通过 length 判断长度, 利用for循环机制实现的。但在 Set Map 上使用会报错,所以我认为是调用的迭代器,不断调用 next,传参到回调函数。由于网上没查到答案也不妄下断言了,有答案的人可以评论区给我留言)

    关于循环语句可以看看:深入理解 JavaScript 之事件循环(Event Loop)

    for循环和forEach的语法区别

    了解了本质区别,在应用过程中,他们到底有什么语法区别呢?

    1. forEach 的参数。

    2. forEach 的中断。

    3. forEach 删除自身元素,index不可被重置。

    4. for 循环可以控制循环起点。

    forEach 的参数

    我们真正了解 forEach 的完整传参内容吗?它大概是这样:

    arr.forEach((self,index,arr) =>{},this)

    self: 数组当前遍历的元素,默认从左往右依次获取数组元素。
    index: 数组当前元素的索引,第一个元素索引为0,依次类推。
    arr: 当前遍历的数组。
    this: 回调函数中this指向。

    let arr = [1, 2, 3, 4];
    let person = {
        name: '技术直男星辰'
    };
    arr.forEach(function (self, index, arr) {
        console.log(`当前元素为${self}索引为${index},属于数组${arr}`);
        console.log(this.name+='真帅');
    }, person)

    我们可以利用 arr 实现数组去重:

    let arr1 = [1, 2, 1, 3, 1];
    let arr2 = [];
    arr1.forEach(function (self, index, arr) {
        arr1.indexOf(self) === index ? arr2.push(self) : null;
    });
    console.log(arr2);   // [1,2,3]
    dd99b273e0c01b7da79637843b1b27e4.png

    forEach 的中断

    在js中有break return continue 对函数进行中断或跳出循环的操作,我们在 for循环中会用到一些中断行为,对于优化数组遍历查找是很好的,但由于forEach属于迭代器,只能按序依次遍历完成,所以不支持上述的中断行为。

    let arr = [1, 2, 3, 4],
        i = 0,
        length = arr.length;
    for (; i < length; i++) {
        console.log(arr[i]); //1,2
        if (arr[i] === 2) {
            break;
        };
    };
    
    arr.forEach((self,index) => {
        console.log(self);
        if (self === 2) {
            break; //报错
        };
    });
    
    arr.forEach((self,index) => {
        console.log(self);
        if (self === 2) {
            continue; //报错
        };
    });

    如果我一定要在 forEach 中跳出循环呢?其实是有办法的,借助try/catch

    try {
        var arr = [1, 2, 3, 4];
        arr.forEach(function (item, index) {
            //跳出条件
            if (item === 3) {
                throw new Error("LoopTerminates");
            }
            //do something
            console.log(item);
        });
    } catch (e) {
        if (e.message !== "LoopTerminates") throw e;
    };

    若遇到 return 并不会报错,但是不会生效

    let arr = [1, 2, 3, 4];
    
    function find(array, num) {
        array.forEach((self, index) => {
            if (self === num) {
                return index;
            };
        });
    };
    let index = find(arr, 2);// undefined

    forEach 删除自身元素,index不可被重置

    forEach 中我们无法控制 index 的值,它只会无脑的自增直至大于数组的 length 跳出循环。所以也无法删除自身进行index重置,先看一个简单例子:

    let arr = [1,2,3,4]
    arr.forEach((item, index) => {
        console.log(item); // 1 2 3 4
        index++;
    });

    index不会随着函数体内部对它的增减而发生变化。在实际开发中,遍历数组同时删除某项的操作十分常见,在使用forEach删除时要注意。

    for 循环可以控制循环起点

    如上文提到的 forEach 的循环起点只能为0不能进行人为干预,而for循环不同:

    let arr = [1, 2, 3, 4],
        i = 1,
        length = arr.length;
    
    for (; i < length; i++) {
        console.log(arr[i]) // 2 3 4
    };

    那之前的数组遍历并删除滋生的操作就可以写成

    let arr = [1, 2, 1],
        i = 0,
        length = arr.length;
    
    for (; i < length; i++) {
        // 删除数组中所有的1
        if (arr[i] === 1) {
            arr.splice(i, 1);
            //重置i,否则i会跳一位
            i--;
        };
    };
    console.log(arr); // [2]
    //等价于
    var arr1 = arr.filter(index => index !== 1);
    console.log(arr1) // [2]

    for循环和forEach的性能区别

    在性能对比方面我们加入一个 map 迭代器,它与 filter 一样都是生成新数组。我们对比 for forEach map 的性能在浏览器环境中都是什么样的:
    性能比较:for > forEach > map
    在chrome 62 和 Node.js v9.1.0环境下:for 循环比 forEach 快1倍,forEachmap 快20%左右。原因分析
    for:for循环没有额外的函数调用栈和上下文,所以它的实现最为简单。
    forEach:对于forEach来说,它的函数签名中包含了参数和上下文,所以性能会低于 for 循环。
    mapmap 最慢的原因是因为 map 会返回一个新的数组,数组的创建和赋值会导致分配内存空间,因此会带来较大的性能开销。如果将map嵌套在一个循环中,便会带来更多不必要的内存消耗。
    当大家使用迭代器遍历一个数组时,如果不需要返回一个新数组却使用 map 是违背设计初衷的。在我前端合作开发时见过很多人只是为了遍历数组而用 map 的:

    let data = [];
    let data2 = [1,2,3];
    data2.map(item=>data.push(item));

    写在最后:这是我面试遇到的一个问题,当时只知道语法区别。并没有从可迭代对象迭代器生成器性能方面,多角度进一步区分两者的异同,我也希望我能把一个简单的问题从多角度展开细讲,让大家正在搞懂搞透彻。


    如果此文章对您有帮助或启发,那便是我的荣幸

    关于本文

    作者:技术直男星辰,已授权
    https://juejin.cn/post/7018097650687803422

    推荐链接

    1. 10张脑图带你快速入门Vue3 | 附高清原图

    2. 前端程序员简历模板整理和下载

    3. 小抄学习法: 4张图掌握JS核心要点

    f770e41dcee3bc6f87007080fb097607.png

    展开全文
  • 在双向循环链表中,在p所的结点之后插入s指针所的结点,其操作是( D ) A p->next=s; s->prior=p; p->next->prior=s; s->next=p->next; B s->prior=p; s->next=p->next; p->next...

    题目:

    在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是( D )

     

    A p->next=s; s->prior=p; p->next->prior=s; s->next=p->next;

    B s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;

    C p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;

    D s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;

     

     

     

     

    展开全文
  • 【单选题】第一次数学课老师让大家下载了( )工具软件 【单选题】s="一二三四",s.replace("四","五六七")结果是什么? 【单选题】体系的下列各组物理量中都是状态函数的是: 【单选题】_______ heißt das auf Deutsch...
  • 循环结构

    千次阅读 2019-11-13 17:16:29
    1,循环事物周而复始的运动或变化。 循环的条件:是一个boolean表达式。该表达式决定是否执行循环体。在某些情况下,循环条件以循环次数的方式体现。 循环体:是循环的主体,如果循环条件允许,这个代码块将被...
  • python中死循环

    千次阅读 2020-11-24 00:16:58
    循环循环重复执行一段代码若干次,为什么要有循环? 因为循环可以避免大量的代码重复。 死循环当一个循环可以执行无限次,也就是没有终止条件,我们称这个循环是死循环。 编写死循环程序实际上是不对的,一旦写...
  • 嵌套循环

    千次阅读 2021-01-20 20:04:21
    嵌套循环 所谓嵌套循环,是一个循环循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。 **总共的循环次数=外循环次数 * 内循环次数 外层循环执行一次、内层循环执行多次 ** ...
  • javascript中函数的循环调用

    千次阅读 2017-09-16 17:43:14
    javascript中函数的循环调用
  • 首先你要确定for和while里面的各个字段分别表示什么含义: Python 中的循环语句有 2 种,分别是 while 循环和 for 循环 for 循环语句的执行流程如图 1 所示。 for 循环语句的执行流程图 图 1 for 循环语句的执行...
  • HashMap为什么会出现死循环

    千次阅读 多人点赞 2019-08-01 14:56:22
    问题 如果是在单线程下使用HashMap,自然是没有问题的,如果后期由于代码优化,这段逻辑引入了多线程并发执行,在一个...这是为什么? 原因分析 在了解来龙去脉之前,我们先看看HashMap的数据结构。 在内部,Ha...
  • Python for死循环

    千次阅读 2020-11-24 00:17:02
    循环循环重复执行一段代码若干次,为什么要有循环?因为循环可以避免大量的代码重复。死循环当一个循环可以执行无限次,也就是没有终止条件,我们称这个循环是死循环。编写死循环程序实际上是不对的,一旦写出来...
  • 循环的认识:在循环中有 for循环,while语句循环,do while 语句循环等。  循环语句是为了解决那些不断重复的操作,省时省力。  当然每一个循环语句中都有初始的判断条件,最终的结束条件,以及如何进行每一次 ...
  • //制作指向循环链表某节点的指针 delPrior(s);//删除s的前驱节点 printf("s指向的数据为%d\n",*s); printf("删除其前驱节点:\t"); showList(L); getchar(); return 0; } void initLink(CLinkList L) { L...
  • C语言中的循环结构

    千次阅读 多人点赞 2020-03-21 21:31:27
    循环结构是在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环循环结构的三个要素:循环变量、循环体和循环终止条件。循环结构有三种语句,即while、do...
  • Looper.loop死循环什么不会卡死

    千次阅读 2017-10-29 17:26:56
    1) Android中为什么主线程不会因为Looper.loop()里的死循环卡死? 这里涉及线程,先说说说进程/线程,进程:每个app运行时前首先创建一个进程,该进程是由Zygote fork出来的,用于承载App上运行的各种Activity/...
  • 《剑offer》刷题笔记(递归和循环):斐波那契数列 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://github.com/WordZzzz/CodingInterviewChinese2 文章地址:...
  • 3、loop="true" 的是音乐文件是否循环播放,也可以指定循环播放的次数。 比如loop=”3”表示重复播放3次,loop=”-1”和loop=”true”都表示无限循环。 4、hidden="true" 的是控制面板是否隐藏。 true表示隐藏...
  • 我们先讲一下循环队列的概念: 首先是队列的概念,这个大家都很清楚。队列就是一个线性表。 循环队列就是头尾相连的队列。 那么在普通的队列中我们怎么区别队列中有多少个元素的呢? 队列里有两个指针: 一个指向...
  • mysql循环查询(mysql循环语句)

    千次阅读 2021-01-18 18:32:50
    至于你说的那个循环操作当然是没什么问题了,前提是你的数据是不是海量数据(就是记录很多),如果不是那就安心使用啦!!!只要你写的代码没有逻辑错误呵呵,另外我说的数据过多会不稳定是数据库所有表整个记录在50万条...
  • 单向循环链表

    千次阅读 2019-09-20 19:29:32
    什么是单向循环链表? 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是把尾节点的下一跳指向头结点。 为什么要使用单向循环链表? 在单向链表中,头指针...
  • 循环调用函数和函数中实现循环

    千次阅读 2020-04-13 15:19:04
    在编程学习中我们会遇到一些可以循环调用函数解决,也可以在函数中实现循环解决的问题,那么这两种方式那种比较好呢? 在Python的环境下编写了下面的代码用于记录两种方式的运行时间: import time li_1 = [] li_...
  • Python入门五:循环

    千次阅读 2020-11-26 01:35:19
    1. while循环1) 循环i = 0print(i)i = i + 1print(i)i = i + 1print(i)i = i + 1# 逐行输出:0 1 22) while循环当满足条件时,就一直重复执行某段代码。如上例可用while循环改写为:i = 0while i (i)i = i + 1while...
  • 循环神经网络(RNN)

    千次阅读 2018-11-04 22:13:17
    微信公众号  本文同步更新在我的微信公众号里,地址:... ... 目录 1. 基本循环神经网络 2. 双向循环神经网络 2.1 双向循环神经网络的介绍 2.2 双向循环神经网络的训练 ...
  • Kotlin for 循环使用

    千次阅读 2019-05-09 15:58:27
    Kotlin 的for循环使用的是in 先写2个中java的for循环 //普通写法 String [] array ={"苹果","香蕉","菠萝"}; for (int i=0;i<array.length;i++){ System.out.println(array[i]); } //for each 写法 Stri...
  • matlab循环生成矩阵

    千次阅读 2021-04-21 06:26:41
    MATLAB 的矩阵求值的循环语句?clc;clearall;closeall;t0=[11];a=[12;34]t=t0;t(1,:)=t0'\an=10;fori=2:nt(i,:)=t(i-1,:)'\a;endtmatlab 中的核矩阵for循环问题A(i,:)-A(j,:)表示A矩阵的第i行减去第j行,得到的是一个...
  • 事物周而复始地运动或变化。意思是转了一圈又一圈,一次又一次地循回。**循环 ,是C语言编程里非常重要的结构。使用循环,可以帮我们快速解决类似的、需要重复实现、处理的问题。以下分享学习C语言三种常见循环:...
  • for 循环详解

    千次阅读 2021-03-10 10:13:22
    掌握 for 循环的使用 学习内容: 1、for语法 for(初始化语句; boolean表达式; 循环后操作语句) { 循环体; } 流程图如下: 特点: 初始化语句:只在循环开始时执行一次,一般是定义一个变量,并赋值。 boolean...
  • JavaScript for循环 双重循环

    千次阅读 2020-09-21 16:32:21
    for循环 语法结构 for(初始化变量;条件表达式;操作表达式){ //循环体 } 初始化变量: 通常被用于初始化一个计数器,该表达式可以使用var关键字声明新的变量这个变量帮我妈来记录次数。 条件表达式: 用于确定每一次...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 705,874
精华内容 282,349
关键字:

循环指什么