精华内容
下载资源
问答
  • 下面部分代码中在for循环里把i赋值给b[i],出了for循环b[i]里值不是我们想要的,如何把这个符合约束的i值存在b[i]里呢? int b[12]={0};//核心点集合 for(int i=0;i;i++){ if((depts[i]+1)>=minpts){ ...
  • python的for循环中不能修改循环变量i

    千次阅读 2015-11-26 15:01:30
    python的for循环中不能修改循环变量i,有需求可以用while代替 如: for i in range(0,len(seq)) 可以修改为: i = 0 length = len(seq) while i  #just do it  i += 1

    python的for循环中不能修改循环变量i,有需求可以用while代替

    如:

    for i in range(0,len(seq))

    可以修改为:

    i = 0
    length = len(seq)
    while i < length:
        #just do it
        i += 1

    展开全文
  • 先来看一组简单代码,引出这篇博客的核心 for(var i=0;i<9;i++){ console.log(i); //依次输出0.1.2.3.4.5.6.7.8 ...在这段代码中,在函数内部,i的值为确定的9,这是因为for循环{}没有块...

    先来看一组简单代码,引出这篇博客的核心

    for(var i=0;i<9;i++){
        console.log(i);     //依次输出0.1.2.3.4.5.6.7.8
        function f() {
            console.log(i);;
        }
    }
    f();//输出单个9
    

    在这段代码中, 在函数内部,i的值为确定的9,这是因为for循环{}没有块级作用域的概念,在通过作用域链引用i时引用的是全局变量对象中的i,在全局作用域中只有一个确定的i值,也就是for循环完毕之后的i的值:9。

    下面介绍几种可以使函数内部可以获取到循环变量i的方法,先来看一组错误的实例

    allList = $("tab_header").getElementsByTagName("li");
    doms = $("tab_content").getElementsByClassName("dom");
    for(var i=0;i<allList.length;i++){
        allList[i].onmouseover = function () {
           allList[i].className = "selected"
            doms[i].style.display = "block";
        }
    }

     这是for循环中绑定的DOM事件,allList、doms为获取到的包含多个DOM对象的数组,在这之中,我们期望通过for循环改变这两个数组中所有DOM对象的属性,但是通过了解上面的简单代码,如果我们用i来作为索引,那么allList[i]其实与allList[(allList.length+1)]是等价的,但数组中allList[(allList.length+1)]是undefined(想象一下,数组长度为6,索引是从0开始的,那么他存在索引为6的值吗,)所以我们期望修改的每个DOM对象的属性是无法完成的。

    如果想要使代码符合我们的期望,可以通过以下两种方法

    1.for循环时把循环变量i作为DOM对象的属性绑定到每个DOM对象上面,代码如下

    allList = $("tab_header").getElementsByTagName("li");
    doms = $("tab_content").getElementsByClassName("dom");
    for(var i=0;i<allList.length;i++){
        var sli = allList[i];
        sli.index = i;  //可以缩写为allList[i].index = i;
        allList[i].onmouseover = function () {
            this.className = "";
            doms[this.index].style.display = "block";
        }
    }

    在这里,我们一个重要的思想就是,我们不需要拿到i这个变量,我们只需要拿到每次循环的变量i的值!

    在这段代码中,我们把每次循环的 i 作为数组单个DOM的index属性绑定在了DOM中(实例化的场景,就好像五个兄弟img标签,我们通过这种方法给他们绑定了值分别为0.1.2.3.4的id),这样每次循环的i的值就会绑定在对应的DOM对象里。看到这里,我们期望的红色部分的代码应该是allList[sli.index],但是别忘了,sli也是通过索引i来赋值的,所以sli的值为allList[(allList.length+1)],要解决这个问题,在这里我们引入this对象这个知识点,this对象代表的是每次循环时的allList[i](也就是循环到的单个DOM对象)。这样通过this.index可以获得i的值(注意,上面说到了,是i的值而不是i这个变量)

    2.立即执行函数中进行闭包

    这里的闭包可以通过两种方法,但是统一的思想都是把变量i作为参数传入到立即执行函数中。

    ①第一种闭包,把i作为一个参数传进去,直接将立即执行函数赋值给事件。

    allList = $("tab_header").getElementsByTagName("li");
    doms = $("tab_content").getElementsByClassName("dom");
    for(var i=0;i<allList.length;i++){
        (function (x) {
            allList[i].onmouseover = function () {
                allList[x].className = "selected";
                doms[x].style.display = "block";
            }
        })(i);

     

    ②第二种闭包,立即执行函数,利用return在闭包中返回

    allList = $("tab_header").getElementsByTagName("li");
    doms = $("tab_content").getElementsByClassName("dom");
    sli.onmouseover = (function (x) {
        return function () 
            allList[x].className = "selected";
            doms[x].style.display = "block";
                }
            })(i);
    }

    在这两种闭包里面,都是添加了立即执行函数,然后让事件/事件对应的函数在立即执行函数中执行。我们把每次循环的变量i作为实参,把他的值赋予形参x,这时候由于每次循环都会立即执行函数(这里涉及到同步异步的问题,立即执行函数是同步操作,其它函数是异步操作),相当于每次循环都创建了一个函数,此时可以获得当前循环中的i的值,然后把i的值传给形参并保存在形参的内存中。举一反三,通过对this对象的了解其实在这里我们也可以用this来代表allList[x],但是为了不引入this对象这个知识点以致逻辑混乱,我们用了allList[x],但this可以代表allList[x]这个我们是需要知道的。

    最后做一个总结:对于以上三种方法,共同的思想都是把循环中的变量i的值保存下来,只不过第一种方法把变量i的值保存在了DOM对象的属性中,后两种方法把变量i的值保存在了立即执行函数的形参中。

    以上便是所有,另对于其中的一些代码,还可能存在疑惑的地方做一些补充:

    1.上面用到了(函数)(),即(function (x) { return function () allList[x].className = "selected"; doms[x].style.display = "block"; } })(i);关于这个的解释请先从以下代码看起

    function f1() {
      函数体  
    }
    

    f1();

    我们知道对于一个函数,f1()就是对函数的执行,那么对于上面的函数,剖析来看是这样的:(function (x) {函数体})(i);也就是立即执行函数。

    其中包裹整个函数的括号的含义请看以下博客:

        深入理解JS中的立即执行函数

    对于同步异步操作的问题,在文章的第一段代码,在函数中会输出9,因为for循环跟函数声明时异步操作,也就是for循环时,函数不能执行(他存在于任务队列上),只有当for循环结束后,函数才能从任务队列上下来进入执行阶段,故此时i值确定,那么这个事件所对应的函数也就是为一个确定的函数.

    在下面这个代码中,我们利用了立即执行函数,此时每次循环都会立即执行该函数,理解为同步操作,也就是每次循环我们都会创建一个函数,并把实参i,也就是循环中i的值保存在立即执行函数中,然后通过一个闭包来调用,这样即使函数执行完毕后,闭包函数还依然存在着对i的使用,让i不会被销毁

    for(var i = 0;i<9;i++){
        (function(){
            console.log(i);   //输出0.1.2.3.4.5.6.7.8
            function f() {
                console.log(i);//输出9
            }
        })();
    }

     

    展开全文
  • 程序代码:     运行结果:

    程序代码:

     

     

    运行结果:

    展开全文
  • for循环i变量初始化时报错

    千次阅读 2014-10-12 11:17:41
    for循环i变量初始化时报错

    用的gcc版本号为:gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) 

    写的程序源文件名为:643b.c,

    该文件中,有一个语句:for(int i=0;i<11;i++)

    运行编译命令:gcc -o 643b 643b.c

    会报错:

    643b.c: In function ‘main’:
    643b.c:5:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
      for(int i=0;i<11;i++)
      ^
    643b.c:5:2: note: use option -std=c99 or -std=gnu99 to compile your code

    需要在命令行中添加参数  -std=c99 或者 -std=gnu99

    gcc -o 643b 643b.c -std=c99

    运行程序:./643b

    得到结果:

    I am happy

    或者:

    gcc -o 643b 643b.c -std=gnu99

    运行程序:./643b

    得到结果:

    I am happy

    出错的原因可能是因为只有在标准的c99或者gnu99中,才能在for循环中初始化

    定义i的类型,所以需要加上参数:-std=c99 或者 -std=gnu99


    展开全文
  • 其中的 i=i+5 这一行不会改变for循环中i的值,for循环变量i会取哪些值,是第一次进入循环时就决定了的。无论在循环中做什么事都不会改变循环的起始,中止,或步长值。要想实现想要的功能,可以使用while ...
  • for循环变量i始终为length值的典型案例分析与解决
  • 初次看到这种写法的时候肯定会有很大的困惑,比如说第一次大循环i是0,但等它结束,由于内层循环结束时i值为2,那是不是第二次大循环i++就等于3了呢,然后内层循环就无法进入,这样想合情合理
  • 实时获取for循环中的变量 i 的值

    千次阅读 2018-09-06 10:11:31
    解决办法:使用闭包将变量 i 的值保护起来。 1、加一层闭包,i 以函数参数形式传递给内层函数 2、加一层闭包 ,i 以局部变量形式传递给内存函数。 3、加一层闭包,i 以 局部变量的形式传递给内存函数 4...
  • matlab之在循环中修改循环变量

    万次阅读 2017-06-16 16:48:34
    matlab有特定的for循环形式,如for i=1:10,这个循环每次都会在已定的向量中取值。 如果写作: for i=1:10 ... i=i+2; ...如果想要在每次循环中改变循环变量可以使用while 如 while i ... i=i+2;
  • 使用 let 解决for 循环闭包 i变量问题

    千次阅读 2016-08-18 09:52:11
    当let块范围变量出现后,可以方便解决 for循环i变量绑定问题,demo 如下 ; charset=utf-8"/> <title>let 解决for 循环闭包变量问题 <script type="text/javascript">
  • 预处理机制:批处理读取命令时是按行读取的(另外例如 for 命令等,其后用一对圆括号闭合的所有...setlocal enabledelayedexpansion ,就是启用变量延迟,我们可以形象的认为是启用了“对变量动态捕获扩展变化”。而
  • 在循环内部改变循环变量

    千次阅读 2017-11-19 17:06:48
    int main() { int i = 0; int arr[2] = { 0 }; for (i = 0; i { arr[i] = 1; printf("%d\n",i);// 0 1 2 3 1 2 3 1 2 3 然后以1 2 3死循环 } ...//i和arr[2]是局部变量,在栈里,对栈的
  • for循环中函数对变量i的使用

    千次阅读 2018-08-16 11:12:52
    在一些循环中需要对每个i执行操作,每次输出最后的数字,比如有5个li 会输出5 var list = document.querySelector("li"); for(var i = 0; i&lt;list.length; i++){ list[i].onmouseover = function...
  • matlab中for循环的循环变量在循环体中不能改变 for i = 1:50 if... i=i-1 else ... end i-1是不会起作用 用while吧
  • for循环体中函数对变量i的使用

    千次阅读 2019-07-20 18:29:45
    话不多说,先看看大家常常出现的问题: var a=[]; for(var i=0;i<10;i++){ a[i]=function(){ console.log(i); ...因为这里是用var声明的变量,是一个全局变量,被赋给数组a的函数内部的co...
  • for循环中的i变量问题

    千次阅读 2017-05-28 20:57:38
    for循环中的i变量问题1.如何点击每一列的时候alert 其index? <li>111 <li>222 <li>333 <li>444 </ul>
  • [python笔记]for循环中循环变量迭代问题在python中,for循环相当于一个迭代器,在循环体中改变循环变量的值对循环次数是没有影响的。
  • 第六课for循环(2)---使用循环变量

    千次阅读 2015-09-30 00:50:08
    第六课 for循环(2)---使用循环变量循环变量】 上节课样例程序中使用了c++的for循环语句的简单形式,基本格式为: for (int i=0; i < N; i++ )   语句/复合语句; 其中: l 第1部分“ int i=0 ”表示在循环...
  • R中循环框中改变循环变量

    千次阅读 2015-08-12 19:02:54
    对于R语言、perl语言,matlab中的for循环也是各有不同。 (一)R语言 R语言和matlab中以对象处理为主,体现出强大的智能性,因此对于语言的循环设计中以操作对象为主, 例如: for(i in 1:20){  cat(i); ...
  • 循环变量

    千次阅读 2015-09-14 20:51:44
    要证明循环正确,必须在以下三个环节中,考虑循环变量的真假。...循环终结后:当整个循环结束时,不变量可以直接说明算法的正确性。 以Insert sort为例,要证明其外循环的正确性。 INSE
  • For循环变量

    万次阅读 多人点赞 2014-08-15 14:48:24
    摘要: 各位基友有没有像我一样没有认真对待过for循环?留下罪证。。。
  • matlab中for循环的循环变量在循环体中不能改变的问题最近一直在写java,写习惯了,发现写matlab还是挺不习惯的,由于本人是通信专业的学生,因此,也就避免不了要做一些仿真,也就避免不了要写了一些matlab程序,...
  • Java循环变量在哪里赋值

    千次阅读 2017-07-20 20:08:06
    在循环体外为循环变量赋初值: int sum=0; int i=0,j=0,k=0; for(;i;i++){ for(;j;j++){ for(;k;k++){ sum++; } }
  • 在for循环中,我们有时会想要在for循环中多个地方,改变当前控制for循环变量的值,让它按照这个值重新循环。一个解决方法是,用一个布尔值isChangeI,在改变后没这个值设置为true,最后再用if(isChangeI)判断,...
  • 本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 778,852
精华内容 311,540
关键字:

循环变量i可以