这里主要总结if、switch分支、for、while循环
if语句有三种语法结构:
(1)if(条件表达式){
表达式*;
}
这种结构用于对控制流程在满足一定条件时执行某段特定的代码,其中条件表达式的结果必须是Boolean型且其值为true时执行表达式*。当{}中只有一个表达式时{}可以省略,当然,最好不要省略,这样不规范可读性差且容易发生错误。
(2)if(条件表达式){
表达式1;
}else{
表达式2;
}
这种结构完成的功能与三元运算符相似,都是在满足条件表达式时执行表达式1,不满足时执行表达式2。但是二者不能等同,例如当表达式为输出语句时只能用if形式不可以改写成三元运算符。
(3)if(条件表达式1){
表达式1;
}else if(条件表达式2){
表达式2;
}else if(条件表达式*){
表达式*;
}
这种结构是在第二中结构上的拓展,当满足条件1则执行表达式1,不满足则判断是否满足条件2,依次下去。
switch语句的语法结构如下:
switch(参数对象){
case 常量表达式*:
语句*;
break;
default:
语句def;
break;
}
当参数对象与对应常量表达式相同时就执行对应的语句,如果都不相同就执行语句def。这其中default、break是可以省略不写的。不过要注意,switch的执行过程是先从各个case中匹配对象与常量表达式,满足顺序执行下去在执行到最后一个语句或者遇到break才结束;case都不匹配则直接找到default然后顺序执行到最后一个语句或者break再结束。还有一点要注意的是switch中判断用的参数对象以及常量表达式只能是int、short、char或者byte型(其封装类型也可以) ,在JDK1.5版本之后可以是enum型,在JDK1.7之后可以是string型。
for循环语句的语法结构为:
for(初始化参数;条件判断表达式;循环后处理表达式){
表达式*;
}
for循环先执行初始化参数,参数满足条件表达式时执行表达式*,接着执行循环后处理表达式并进行条件判断,满足则再次执行表达式*,这样循环下去直到参数不满足条件表达式则跳出循环,当条件表达式恒为真,称为死循环。其中初始化参数、条件判断、循环后的处理都是可以省略的,只是";"必须保留,当三个表达式都不写的时候是个最简单的死循环。这里举个正常使用的例子,要求输出1~100中所有的质数。
/*输出1到100的质数
*质数就是除了1和其本身没有其他因数的整数
*一拿到这个题思路首先想到for循环遍历1到100的整数,记为i
*然后在这个for循环内部再嵌套一个for循环遍历2到100中比这个数小的整数,记为j
*如果i%j==0,则说明i可以被j整除不是质数则跳出j循环继续下一个i循环
*如果i%j遍历完j都没有发现整除的则输出该i
*这里可以优化,显然2开始的偶数都不是质数我们可以从3开始遍历,移动的跨度也可以定为2,而最小质数2我们可以直接输出
*/
public static void main(String[] args){
System.out.print("2");
a:for(int i =3;i<100;i+=2){
b:for(int j=3;j<i;j+=2){
if(i%j==0){
continue a;
}
}
System.out.print(","+i);
}
}
上面例子中用到了continue这个关键字,Java中,结束循环的方法有多种,常用的是break(跳出当前循环)、continue(跳出当前循环执行下一个循环)、在条件表达式中插入一个参数在循环模块中更改这个参数使其不满足循环条件、return(return结束的其实是一个方法)。这里break和continue都只能跳出当前循环,当循环有多层怎么办?就是想我的例子当中将不同循环打上标签,然后在使用break或者continue时加上他们的标签即可。
while语句有两种语法结构:
(1)while(条件表达式){
表达式*;
}
先进行一次条件判断,为true则执行表达式*,再进行条件判断,为true再执行表达式*,循环下去直到条件表达式值为false为止结束循环
(2)do{
表达式*;
}while(条件表达式)
先执行表达式*,再进行条件判断,为true再执行表达式*,循环下去直到条件表达式值为false为止结束循
这两种结构的区别显而易见了。
面试题:
下面这段程序的输出结果是什么
int count=1;
int index = 3;
switch(index){
default:
count++;
case 1:
count++;
case 2:
count++;
}