就像有知觉的生物一样,程序必须在执行过程中控制它的世界,并作出选择。在java中,你要使用执行控制语句来作出选择。 ——《java编程思想》
在java中,执行控制语句设计的关键字包括,if-else,while,do-while,for,return,break以及选择语句switch。
1、所有的条件语句都利用条件表达式的真假来决定执行路径。
2、if-else。
if(条件表达式){
执行语句1;
}else{
执行语句2;
}
或
if(条件表达式){
执行语句1;
}else if(条件表达式){
执行语句2;
}else{
执行语句3;
}
来代码展示一下吧:
2、迭代。
while,do-while和for用来控制循环,有时将他们划分为迭代语句,当满足条件时,执行语句会重复执行,直到起控制作用的条件表达式为false时为止。
2.1、首先看while的表达式:
while(条件表达式){
执行语句;
}
只要满足条件表达式为true,我们就执行语句。用代码来看一下吧。
在这里,调用了3次condition(int count)方法,但是while中的执行语句只执行了2次,因为第三次调用时,生成了一个false,停止while循环。
2.2、do-while;do-while表达式为:
do{
执行语句;
}while(条件表达式);
do-while和while的区别在于,他会先去执行一次执行语句再进行判断。
相信这个结果最能展示了,也就是第一次值就是false,但仍然执行了一次count++;
2.3、for
for循环在第一次迭代之前要进行初始化,随后判断条件语句,执行完执行语句后进行一次“步进(step)”操作。for循环格式为:
for(初始化语句; 条件表达式; 步进语句){
执行语句;
}
下面用例子来看一下:
首先这里会初始化i,然后判断i的值是否小于等于10,然后执行一次输出语句,再然后进行i++,再判断,执行,再进行i++,直到不满足判断条件为止。
在这里,我省略了判断条件,也就是说,不进行判断了,默认为true,也就这个循环会一直进行下去。当然,这里的其他两个语句也可以进行省略,初始化语句省略的情况下,在for循环中使用的变量,需要在执行之前进行初始化。
而步进操作被省略的话,也就是说执行完之后我不进行什么改变。
三个条件都不写也可以,但没什么意义,不如用一个while(true)死循环。
练习题1:
产生25个int类型的随机整数,使用if-else语句来判断大于小于等于紧随他生成的随机数
结果:
练习题2:使用两个for循环和取余操作符(%)来探测和打印素数(素数是只能被自身和1整除的整数)
answer1是自己想出来的办法,answer2是网上的一个答案。其实差不多,我的是直接输出,判断b的值来看是不是素数,它的方法为数组标记,是从j=2开始,用j+1的数去判断他之后的数i能否被他整除,如果能被整除,就记录下标为i的数不是素数,也就是a[i]!=0;这样循环次数会少很多。啊~突然在写解析时明白了为什么我的方法会比他的慢了。(当把100修改为10000以内,100000以内时,answer1慢)
2.4、foreach语法。
foreach语法也叫增强for循环,用于数组和容器,至于这两个概念,在之后的复习中会详细介绍。foreach语法表示不必再去创建int变量去对由访问项构成的序列进行计数,foreach会自动产生每一项。下面来演示代码。
这里foreach循环定义了一个float类型的x,进而将每一个f的元素赋值给x。
任何一个返回数组的方法都可以使用foreach,比如String类的toCharArray()方法。它返回一个char数组。
2.5、return,break,continue。
return关键字有两个用法,一方面指定一个方法返回什么值,另一方面会导致当前的方法退出,并返回那个值。
这里当输出到5之后,count变成了6,被我return,中断了这个方法的执行,所以没有继续执行。
这里用return来返回值。
break,continue可以在任何迭代语句的主体部分使用,break用于退出循环,不执行循环中剩余的部分,而continue是退出当前的迭代,然后从循环起始处开始下一次迭代。
从这里可以看出,当到64之后直接退出了循环,不管是while,for,foreach。
2.5、break,continue完成goto跳转操作。在java中,预留goto为保留字,使用了break,和continue来实现(我是没有看到过这种用法,第一次在书中看到。)这里也用到了标签机制。
标签后面跟有:的标识符。比如: label1 :
如果break,continue和标签一块使用,就会中断循环,知道标签所在的地方,来看代码吧。
规则:
1). 一般的continue会退回最内层循环的开头,并继续执行;而带标签的continue会达到标签的位置,并重新进入紧接在那个标签后面的循环。
2).一般的break会中断并跳出当前循环;带标签的break会中断并跳出标签所指的循环。
2.6、 switch-case语句
switch(变量){
case 变量1:
执行语句1;
break;
case 变量2:
执行语句2;
break;
case 变量3:
执行语句3;
break;
case 变量4:
执行语句4;
break;
default:
执行语句5;
break;
}
swtich()变量类型只能是int、short、char、byte和enum类型(JDK 1.7 之后,类型也可以是String了)。当进行case判断时,JVM会自动从上到小扫描,寻找匹配的case。当找不到匹配的case时,执行default。当case语句中都没有写break语句时,会从匹配到的case之后顺序执行,知道执行完毕或者碰到break;