书接上文。
这次讨论循环结构。所谓循环结构,就是在条件允许的前提下, 一个语句或者多个语句会无休止的运行下去,一直到条件达成为止。
oc中提供了三种循环语句,分别是,for,while和do while语句。
基本上而言,三种语句与java中的循环语句没有任何本质上的区别。
首先是for语句。
格式如下:
for (init_expression; loop_condition; loop_expression)
{
program statement
}
应该都不难理解,init_expression属于初始化语句,告诉计数器的初始值是多少,比如说变量i是计数器,可以写成 i=1。但是应该注意到的一点是,貌似oc中并不支持在循环体中加入变量定义,正如第一章中总结的那样,所有的变量都要在使用之前定义,例如java中就可以这样定义:
for (int i=1; i<100;i++){
int j++;
}
这样的好处是,有时候并不清楚在循环体中需要多少变量来维持这个循环的运转,当我们需要对这个变量个数进行改变的时候,不需要打开之前定义的类就可以直接使用。
很纠结阿。
所以如果在oc中写这段程序就需要变成这样:
//******code*****//
int i,j;
for (i=1;i<100;i++){
j++;
}
//******code*****//
以上这种写法在java中也可以使用,但是我更熟悉的还是第一种。方便阿。。。。
loop_condition 这个表达式规定了循环体中循环的次数,比如说如果我计数器的初始值是1 那么要循环100遍就是i<=100。
loop_expression 表达式规定了每一次循环结束之后,计数器要改变多少。
现在讨论一个非常纠结的问题,那就是 ++i 和 i++之间到底有什么区别。
简单的来说分两种情况,第一种情况,当程序员想让某变量的数值增加一或者减少一的时候,使用i++,++i 是没有任何区别的。最终都可以转换成i=i+1。同理,也就是说在上述的例子中,我同样可以吧i++换成++i,输出的结果是一样的。
第二种情况,就是在 i++和++i用在表达式之中,两者表达的含义就不一样了,比如说,有这样一个表达式i++<100,假如这个时候i=99,那么当我使用了i++的时候这个时候表达式的结果是true,也就是说,我i++的值依旧是原来的99,并没有进行加一操作。反之,如果是++i<100的话,表达式的值就false,也就是说,++i的值已经变成了99+1=100了。
总结来说,i++就是先用后加,而++i就是先加后用。
或者说,如果实在是搞不清楚到底应该是用那个,不如全部都换成i=i+1,或者直接使用i+1<100之类的形式,可以避免出现低级错误。
另外需要明确的一点是,在for循环后面只有一个语句的时候,可以不使用大括号,但是为了方便记忆,不如在输入完for语句之后强制性的跟上一个大括号。
while循环,格式如下:
while(expression)
{
program statement;
}
expression是判断循环进行下去的必要条件,当这个条件判断结果为true时,就循环,如果判断结果为false,跳出循环。
do while循环,格式如下:
do
{
program statement;
}
while(expression)
理解起来也很简单,就是将执行语句放到了前面,而循环是否进行下去的判断语言放到了最后,好处就是有些要考虑到程序健壮性的时候,可以考虑使用do while,无论用户的操作是否合理,都能给出提示。
break和continue语句。
continue基本没有使用过,我也觉得这个东西比较鸡肋,因为很容易出错,continue其实就是实现了在某处循环中因为一些特殊情况不想再局部循环,就使用continue语句,跳过部分的循环,进行下一次循环。总体来说,很鸡肋。
break倒是一个神器,很多时候都能用的到。
举个例子:
假如我们有一组数字,1.2 2.4 5.4 3.5 4 5.7 7.6 5 我们想从里面找到第一个整数,我们就可以使用break语句,在得到第一个整数以后就跳出循环,进行下一步操作。当然也可以加入一些判断语句,作为终止循环的标志。
下面对for,while,还有do while进行一些使用心得的总结。
基本上,for语句一般都是在明确了循环次数的时候使用的循环语句。while和do while是当程序循环时,不知道到底需要循环多少次的时候才使用的语句。
我的个人使用习惯中比较排斥for语句,因为循环的时候很容易出错,其实所有的for语句都可以转变成while语句的,只不过在使用while语句判断的时候,累加器放到了程序体中,不是很容易识别,但是在编写的代码的时候,更符合我自己的思维习惯。
仅供参考。
求指教。