首先,要使用循环就要先明白什么是循环,以及循环的应用场景.
那么顾名思义,循环是程序中不断重复出现的代码的代替,也就是说,当我们在编程中需要多次且连续使用一句话或一段相同的代码时,就可以使用循环来代替了.值得一提的是,通常情况下循环的使用中都是会有递归性的,每一段代码的数据可能不一样.
最简单的例子就是1到100的求和,因为每一次求和的操作实质上都是两个数的相加,那么我们就可以使用循环来借助简单的代码来实现.首先,我们需要一个一个变量来存储1到100的每一个数,但是要注意的是我们每一个数在相加后就不需要在使用了,故而我们只用一个变量来存储就好.同时,我们还需要一个变量来存储每次相加后的和,用于最后的数据输出.
那么根据上面的例子,我们不难明白,在该循环中我们需要一个每次+1的变量i,和一个用于求和的sum变量.那么逻辑就很清晰了,定义一个变量i,使其每次+1就可以了,这借助我们的i++就可以做到,而每一次循环中都需要的语句就是sum = sum + i;那么这句话就是我们循环中需要多次运行的主体了.
了解了这些东西,我们开始进入理论的教学,首先循环分为While循环,do-while循环,for循环和for-each循环.在这里for-each循环先不讲,前期学习中还不需要这个循环
while循环
while循环使用的关键字就是while了,在编程中他的基本格式为
while(布尔表达式){ 循环体; }
在这里面,布尔表达式是用来判断循环是否进行的标志,倘若循环能够一直运行下去,那我们循环后面的语句也就没有意义了,因为程序会一直停留在循环这里而不跳出.在程序运行中,循环会先进行boolean表达式的判断,当表达式的返回值为true时,循环会开始执行,当表达式的值为false时,会跳出循环.
进入循环后,开始顺序执行循环体内的内容。当循环体内容顺序执行完毕后,会回到while处,重新进行boolean表达式的判断,直到表达式为false时,跳出循环。
根据例子来看,在这里面我们的循环条件是i<=100循环体就是 sum += i;以及让循环条件趋于结束的i++;操作。下面是具体的代码:
int i = 1; int sum = 0; while(i<=100){ sum += i; i++; } System.out.println(sum);
我们可以注意到,倘若在boolean表达式在一开始就是false,就不会进入循环内部,即循环体一次也不执行。
do-while循环
do-while循环大致与while循环一致,但是格式与循环次数不同;
do{ 循环体; }while(boolean);
同样都需要while(boolean表达式),但是可以发现,这次的while的()后面跟了一个;而while循环中并没有.
在这里面有一点可以思考,do-while循环中把用来判断的while语句放在了{}的后面,那这样会导致什么效果呢?
经过思考后,我们可以明白,循环在while的前面,那么我们程序运行时会先进入到循环体内进行顺序执行,再进行判断.这样的话不管条件是不是成立,我们都会运行一次循环体的语句
用do-while循环敲出来的例子代码如下:
do { i++; sum += i; }while(i<=100);
for循环
for循环是程序员最常使用的循环,其灵活性比较高,当然,这几种循环都可以用来解决相同的问题,只是各人的习惯不同.那么让我们来学习一下for循环吧
for循环的基本格式不同于while循环,for循环的表达式较多,其基本格式如下
for(表达式1;表达式2;表达式3){ 表达式4; }
在这其中,表达式1是用于声明循环变量的,表达式2是循环条件,其值为boolean类型,表达式3是循环增量,即每次循环一次后的变化值.表达式4是循环的主体结构.
结合例子来看的话,就是
for(int i = 1;i<=100;i++){ sum += i; }
在for循环中比较特殊的就是其三个表达式均可以省略.即可以写成for(;;)的形式,但是表达式1一定要有值,不能写成for(i;;)
在for循环中的循环执行顺序是1>2>4>3>2>4>3>2>4>3>.....>4>2,最终的结束一定是在2的判断时结束,
循环的嵌套使用
不管是那种循环,在使用过程中都是可以相互嵌套使用的.
例如for的嵌套
for(;;){
for(;;){
}
}
循环中的跳出语句
break语句
首先,在switch-case中我们已经初步认识了break,在循环中我们可以用于跳出循环,使循环结束.但是多层循环时,结束的是当前循环.
for(;1;){
for(;2;){
break:
}
}
在上述伪代码中,我们为了方便,在表达式2出直接写了编号来代表第几层循环.当执行break时,我们会跳出for2的循环,重新回到for1的循环中
continue语句
continue是用于跳出本次循环的语句,但是同break一样,continue跳出的是当前循环的本次
for(;i<5;i++){
if(i%3==0)
continue;
}
在上述代码中,continue会跳出i=3时的循环,进入到i=4的循环中继续运行当前循环.
定向跳转的标签
不难发现,无论是break还是continue都是跳出一层循环,但是解决实际问题时,我们往往需要跳出多重循环,那么这个时候我们就需要用到标签;来进行定向跳转,
out:for(;1;){
for(;2;){
break out;
}
)
在这段代码中,由于我们添加了标签out,所以在跳出循环时,我们会跳转至标签的位置,这里的标签也是一个标识符,需要满足标识符的命名规则,