常见的for循环一般是一下代码这种结构:

for (int i = 0; i < 100; i++)
{
    Console.WriteLine(i);
}

或者递减的:

            for (int i = 100; i > 0 ; i--)
            {
                Console.WriteLine(i);
            }

但for当然不止这样一种用法。for的定义,()内的三段表达式,除了中间的必须产生布尔型,并未对其余两段有所限制,只要是表达式就可以了。在Lucene.Net中就有好几次这样的用法。例如:

for (Token token = input.Next(result); token != null; token = input.Next(result))
{
     int len = token.TermText().Length;
     if (len >= min && len <= max)
     {
         return token;
     }
}

这个语句和下面代码的效果是一样的:

           Token token;
            while((token = input.Next(result)) != null)
            {
                int len = token.TermText().Length;
                if (len >= min && len <= max)
                {
                    return token;
                }
            }

其实我认为在这两种循环中,第二种比第一种好理解一点。

还有这种

for (i = 75; i-- > 0; )
    jjrounds[i] = 0x80000000;

出了一个空表达式,其实理解一下也很简单,和下面代码的效果一样:

for (i = 75; i > 0; i--)
    jjrounds[i] = 0x80000000;

朋友留言指正,修正以上代码为:

for(i = 74;i > 0;i--){

jjrounds[i] = 0x80000000;

}

又弄错了,接受批评。应该换成下面的

for(i = 74; i >= 0;i--)

jjrounds[i] = 0x80000000;

空表达式,也是一个表达式啊,放在这里也不犯法。

嘿嘿,还有其他的表达式,比如:

for (int i = 0; i < length; i++, pos++)

这个应该不难理解,第三个表达式有两个,第一个当然也可以有两个

比如            for (int i = 100, j = 100; i > 0 ; i--,j++)

中间的表达式要想用两个就要加运算符了for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++)

这样就总结出三种for循环样式

1、for(int i = 0;i < 100;i++)  //递减和递加的算一种

2、for(;true;)     //有空表达式的

3、for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++)   //有多表达式的

好像就这么多了。但是还有一种,我无法理解的表达式

for(;;)这是个 死循环 无限循环(没有跳出语句,才能成为死循环),汗!!!庐山瀑布汗啊,反正我理解不了。

理解上面的表达式,基本上看别人的代码就不会摸不着头脑了。那是不是真的没有了呢?

来试试这种

        static void Main(string[] args)
        {
            for (Act(); ; )
            {             }
            Console.Read();
        }         static void Act()
        {         }

注意:没见过有这么用的,纯粹是实验,应用产生的后果我不负责啊。

放上三个方法爽爽:

        static void Main(string[] args)
        {
            for (Act1(); Act2(); Act3())
            {             }
            Console.Read();
        }         static void Act1()
        {         }         static bool Act2()
        {
            return true;
        }         static bool Act3()
        {
            return true;
        }

当然,你非要用个委托,我也没意见:

    delegate void Bind();
    class Program
    {
        static void Main(string[] args)
        {
            Bind b = new Bind(Act1);
            for (b(); Act2(); Act3())
            {             }
            Console.Read();
        }         static void Act1()
        {         }         static bool Act2()
        {
            return true;
        }         static bool Act3()
        {
            return true;
        }
    }

我考事件也出来了:

    delegate void Bind();
    class Program
    {
        static event Bind bindEvent;         static void Main(string[] args)
        {
            Bind b = new Bind(Act1);
            bindEvent += new Bind(Program_bindEvent);
            for (b(); Act2(); bindEvent())
            {             }
            Console.Read();
        }         static void Program_bindEvent()
        {
           
        }         static void Act1()
        {         }         static bool Act2()
        {
            return true;
        }         static bool Act3()
        {
            return true;
        }
    }

看出来了,只要是表达式,就能使用啊!除了第二个表达式必须为空,或者布尔值外,其他两个基本没什么限制。第二表达式为空则是死循环。

详解for循环(各种用法)的更多相关文章

  1. linux 详解useradd 命令基本用法

    linux 详解useradd 命令基本用法 时间:2019-03-24 本文章向大家介绍linux 详解useradd 命令基本用法,主要包括linux 详解useradd 命令基本用法使用实例.应 ...

  2. [转] - JAR文件包及jar命令详解 ( MANIFEST.MF的用法 )

    常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. chm 文档一样双击运行了:而另一种是使用 JET 来进 ...

  3. 小白学python之整型,布尔值,十进制二进制转换和字符串详解for循环!

    整型与字符串转化 十进制转二进制. python2,存在int 整型和long(长整型),在python3里就是int/获取的是浮点数 小数 print(bin(15)) 这样可以通过代码来计算十进制 ...

  4. 详解python中@的用法

    python中@的用法 @是一个装饰器,针对函数,起调用传参的作用. 有修饰和被修饰的区别,‘@function'作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义). 代码1 ...

  5. yield关键字详解与三种用法

    本篇文章比较硬核, 适合有一定Python基础的读者阅读, 如果您对Python还不甚了解可以先关注我哦, 我会持续更新Python技术文章 yield详解 yield与return相同每次调用都会返 ...

  6. 实用的PHP功能详解(一)_php glob()用法

    一.使用glob()查找文件 大部分PHP函数的函数名从字面上都可以理解其用途,但是当你看到 glob() 的时候,你也许并不知道这是用来做什么的,其实glob()和scandir() 一样,可以用来 ...

  7. exec族函数详解及循环创建子进程

    前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...

  8. react router @4 和 vue路由 详解(二)react-router @4用法

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 2.react-router @4用法 a.大概目录      不需要像vue那样麻烦的 ...

  9. 面试题:JavaIO流分类详解与常用流用法实例

    Java流概念: Java把所有的有序数据都抽象成流模型,简化了输入输出,理解了流模型就理解了Java IO.可以把流想象成水流,里面的水滴有序的朝某一方向流动.水滴就是数据,且代表着最小的数据流动单 ...

随机推荐

  1. C#入门篇6-5:字符串操作 测试StringBuilder的运行效率

    //测试StringBuilder的运行效率 public static void Fun2() { #region string string str = "我喜欢编程!"; / ...

  2. useradd/du/df/passwd/usermod命令

    一.useradd命令 useradd命令-M -u -s -g 常用 -c:加上备注文字,备注文字保存在passwd的备注栏中.  -d:指定用户登入时的启始目录. -D:变更预设值.(修改默认配置 ...

  3. webApi跨域

    <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...

  4. 判断数据库内容,在页面显示自定义数据case when

    判断数据库内容,在页面显示自定义数据 case when...then ...else...end 比如:数据库内容是这样: 通过sql语句判断,数据库的name字段,内容是月桂的,显示嫦娥,其他的显 ...

  5. (DFS)hdoj1241-Oil Deposit

    #include<cstdio> ][]; ][]={{,},{,-},{,},{-,},{,},{,-},{-,},{-,-}},cnt; void dfs(int x,int y) { ...

  6. bzoj 1185 旋转卡壳 最小矩形覆盖

    题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...

  7. iOS多语言备选机制

    近期伊书突然接到一些外国用户的投诉,说伊书界面变成了中文,但他们系统语言不是中文,是法文俄文日文等,伊书只支持中文跟英文,在不支持系统所用语言的时候,理应会自动选用英文,不知为什么会选成了中文,经过艰 ...

  8. VMware Workstation 10.0.0.1295980 CN

    从V10版本开始,VMware Workstation 官方自带简体中文了,以后大家不需要汉化啦! Winner of more than 50 industry awards, VMware Wor ...

  9. SharePoint 2013 Nintex Workflow 工作流帮助(十一)

    博客地址 http://blog.csdn.net/foxdave 工作流动作 27. Create item in another site(Libraries and lists分组) 该操作用于 ...

  10. SVN服务器配置实战

    [需求] 为公司多个部门建立的SVN仓库compay 公司部门和人员构成 A部门 (zhangsan,lisi,wanger,mazi) B部门(jia,yi,bing,ding) C部门(chun, ...