流程控制语句
一、条件判断语句
1、if-else语句
if (条件表达式)
if语句体;
如果条件表达式为true,执行if语句体, 否则不执行。 当if只有一条语句体时,可以省略{},但是,强烈建议, 不管if有几条语句体,都不要省略{}。
/*
if-else
if (条件表达式) {
if语句体;
} else {
else语句体;
}
当条件表达式为true时,执行if语句体。
否则,执行else语句体。
*/
public class IfElse {
public static void main(String[] args) {
int x = -1;
if (x > 0) {
System.out.println("注册成功");
} else {
System.out.println("注册失败");
}
}
}
/*
if (条件表达式1) {
语句1;
} else if(条件表达式2) {
语句2;
} else if (条件表达式3) {
语句3;
} ……
} else if (条件表达式n) {
语句n;
}
从上到下依次判断各个条件表达式,哪一个条件表达式为true,
就执行对应的分支。至多只会执行一个分支。
*/
public class IfElseif {
public static void main(String[] args) {
//当执行多选择分支时,如果多个条件存在包含关系,
//则需要将范围最小的放在最前面,范围大的放在后面。
/*
错误
int score = 90;
if (score >= 60) {
System.out.println("及格");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 90) {
System.out.println("优秀");
}
*/
int score = 90;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
}
/*
当各个条件没有关联,但频率不同的时候,
我们应该将频率高的放在上面,频率低
的放在下面,以减少判断次数。
40 * 1ms + 30 + 2ms + 20 * 3ms + 10 * 4ms
10 * 1ms + 20 * 2ms + 30 * 3ms + 40 * 4ms
*/
int direction = 1;
if (direction == 1) {
System.out.println("向东");
} else if (direction == 2) {
System.out.println("向南");
} else if (direction == 3) {
System.out.println("向西");
} else if (direction == 4) {
System.out.println("向北");
}
}
}
/*
if (条件表达式1) {
语句1;
} else if(条件表达式2) {
语句2;
} else if (条件表达式3) {
语句3;
} ……
} else if (条件表达式n) {
语句n;
} else {
else语句;
}
从上到下依次判断各个条件表达式,哪一个条件表达式为true,
就执行对应的分支。如果所有的条件表达式都为false,则执行
else分支。
*/
public class IfElseifElse {
public static void main(String[] args) {
int score = 90;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
2、switch case
/*
switch (表达式) {
case 值1: 分支1; [break;]
case 值2: 分支2; [break;]
……
case 值n: 分支n; [break;]
default: 默认分支; [break;]
}
使用表达式的值,依次与每个case进行比较,
哪个case匹配,就执行对应的分支。
如果所有的case都不匹配,则执行default分支。
default分支是可选的。
switch表达式的类型可以是byte,short,int,char,以及
对应的包装类型,String类型与枚举类型。
不可以是boolean,float,double,long。
每个case的值要求是常量值(常量表达式)。
各个case的值不能重复。
*/
public class Switch {
public static void main(String[] args) {
int x = 10;
switch (x) {
case 1: System.out.println("1");break;
case 2: System.out.println("2");break;
case 3: System.out.println("3");break;
default: System.out.println("4");break;
}
switch (x) {
case 1:
case 2: System.out.println("1或2");break;
case 3: System.out.println("3");break;
default: System.out.println("4");break;
}
//switch对String的支持
String s = "abc";
switch (s) {
case "a": System.out.println("1");break;
case "b": System.out.println("2");break;
case "abc":System.out.println("3");break;
}
}
}
3、while
/*
循环:循环就是重复性执行一个相同(相似)的操作。
while (条件表达式) {
循环体;
}
1判断条件表达式是否为true,如果为true,执行循环体。
2重复执行步骤1,直到条件表达式为false,退出循环。
*/
public class While {
public static void main(String[] args) {
/*System.out.println(1);
System.out.println(1);
System.out.println(1);
System.out.println(1);
System.out.println(1);*/
int i = 1;
while (i <= 5) {
//System.out.println(i);
//i = i + 1;
//i += 1;
//i++;
System.out.println(i++);
}
}
}
4、dowhile
/*
do {
循环语句;
} while (条件表达式);
1 执行循环语句,然后判断条件表达式。
2 如果条件表达式为true,重复步骤1。
如果条件表达式为false,退出循环。
while与do-while区别:
while循环是先判断条件表达式,然后执行循环体,
do-while是先执行循环体,然后判断条件表达式。
如果条件表达式开始就为false,则while循环一次
也不会执行,而do-while循环会执行一次。
while循环可能一次也不会执行,do-while循环至少
会执行一次。
*/
public class DoWhile {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);
while (i > 10) {
System.out.println("while循环执行");
}
do {
System.out.println("do-while循环执行");
} while (i > 10);
}
}
5、for 循环
/*
for (初始化语句; 条件表达式; 循环控制语句) {
循环语句;
}
1 执行初始化语句,该语句只执行一次。(不管for循环执行
多少次)
2 判断条件表达式是否为true,如果为true,则执行循环
语句,再执行循环控制语句。
3 重复步骤2,直到条件表达式为false,退出循环。
for循环的初始化语句,条件表达式与循环控制语句都
是可选的,但是;;不能省略。此时,如果条件表达式缺失,
则认为条件表达式永远为true。
for (; ;) {
}
while循环可以看成是缺少了初始化语句与
循环控制语句的for循环。
for (;条件表达式;) {
}
*/
public class For {
public static void main(String[] args) {
/*
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
*/
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
for (int i = 1; i <=5; i++) {
//其他操作
}
/*等价于while循环。
for (;i <= 5;) {
}
*/
}
}
6、循环嵌套
/*
循环嵌套
循环中还有循环。
当循环嵌套时,外循环每执行一次,内循环都会
完整的执行一遍。
*/
public class NestLoop {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
//语句
for (int j = 1; j <=3; j++) {
System.out.println("i=" + i + ",j=" + j);
}
}
}
}
7、break
/*
break
break可以提前结束循环。(不管循环还剩多少次没有执行)
break可以在两处使用:
1 break可以用在switch-case中。
2 break可以用在循环中。
*/
public class Break {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
System.out.println(i);
}
}
}
8、循环标签
/*
循环标签
使用循环标签可以用来标记一个循环(给循环起一个名字)。
*/
public class LoopLable {
public static void main(String[] args) {
/*
continue outer与break inner的区别:
continue outer会结束本次整个外层循环,进行
外层循环的下一次循环。如果外层循环还有其他
语句,则语句不会得到执行。
break inner会跳出整个内层循环,如果外层循环
还有其他语句,则语句会得到执行。
*/
outer:
for (int i = 1; i <= 3; i++) {
inner:
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
//跳出外层循环
break outer;
//continue outer;
//continue inner;
//break inner;
}
}
/*
外层循环的其他循环语句
for (int k = 0; k < 2; k++) {
//操作
}
*/
}
}
}
9、continue
/*
continue
continue用于结束本次循环,对后续的循环没有影响。
continue只能用在循环当中。
*/
public class Continue {
public static void main(String[] args) {
for (int i = 1; i < 5; i++) {
if (i == 3) {
continue;
}
System.out.println(i);
}
for (int i = 1; i < 5; i++) {
if (i != 3) {
System.out.println(i);
}
}
/*
循环控制语句不能简单的认为是循环体
的最后一条语句。
continue可以结束循环体语句,但是
循环控制语句还是可以正常执行。
for (int i = 1; i <= 5; i++) {
System.out.println(i);
if (i == 3) {
continue;
}
}
for (int i = 1; i <= 5; ) {
System.out.println(i);
if (i == 3) {
continue;
}
i++;
}
*/
}
}

浙公网安备 33010602011771号