流程控制语句
- 顺序结构
- 选择结构
- 循环结构
顺序结构
略
选择结构
选择结构(if语句)
格式1:
if(关系表达式) { 语句体 }
格式2:
if(关系表达式) { 语句体1; }else { 语句体2; }
格式3:
if(关系表达式1) { 语句体1; }else if (关系表达式2) { 语句体2; } … else { 语句体n+1; }
选择结构(switch语句)
语句格式
switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; … default: 语句体n+1; break; }
格式的解释
switch : 表示这是switch选择结构 表达式: 这个地方的取值是有限定的 byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串 case: 后面跟的是要和表达式进行比较的值 语句体: 要执行的代码 break: 表示中断,结束的意思,可以控制switch语句的结束。 default: 当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。
执行流程
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
注意事项
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
default可以省略吗?
可以省略。一般不建议。除非判断的值是固定的。(单选题)
break可以省略吗?
可以省略,一般不建议。否则结果可能不是你想要的
default的位置一定要在最后吗?
可以出现在switch语句任意位置。
switch语句的结束条件
遇到break 执行到程序的末尾
/*
看程序写结果
*/
class SwitchTest {
public static void main(String[] args) {
int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y); // 4
System.out.println("---------------");
int a = 2;
int b = 3;
switch(a){
default:
b++;
case 3:
b++;
case 4:
b++;
}
System.out.println("b="+b); // 6
}
}
if和case的区别
在做判断的时候,我们有两种选择,if语句和switch语句,那么,我们到底该如何选择使用那种语句呢?
if语句使用场景
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断switch语句使用场景
针对几个常量值的判断
循环结构
循环结构(for)
语句格式
for(初始化语句;判断条件语句;控制条件语句) { 循环体语句; }
执行流程
A: 执行初始化语句 B: 执行判断条件语句,看其结果是true还是false 如果是false,循环结束。 如果是true,继续执行。 C: 执行循环体语句 D: 执行控制条件语句 E: 回到B继续
注意事项
A: 判断条件语句的结果是一个boolean类型 B: 循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。 C: 一般来说:有左大括号就没有分号,有分号就没有左大括号
/*
需求:在控制台输出所有的”水仙花数”
分析:
我们都不知道什么叫"水仙花数",你让我怎么做呢?
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
A:三位数其实是告诉了我们范围。
B:通过for循环我们就可以实现获取每一个三位数
但是麻烦是如何获取这个三位数的个,十,百位上的数据
我们如何获取一个数据的个,十,百呢?
假设有个一个数据:153
ge: 153%10 = 3
shi: 153/10%10 = 5
bai:153/10/10%10 = 1
qian:x/10/10/10%10
wan: x/10/10/10/10%10
...
C:让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
如果相同,就把该数据在控制台输出。
*/
class ForDemo6 {
public static void main(String[] args) {
//三位数其实是告诉了我们范围。
for(int x=100; x<1000; x++) {
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
//让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
//如果相同,就把该数据在控制台输出。
System.out.println(x);
}
}
}
}
循环结构(while)
语句格式
基本格式 while(判断条件语句) { 循环体语句; } 扩展格式 初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句;
循环结构(do…while)
语句格式
基本格式 do { 循环体语句; }while((判断条件语句); 扩展格式 初始化语句; do { 循环体语句; 控制条件语句; } while((判断条件语句);
循环语句的区别
- do…while循环至少执行一次循环体。而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
跳转控制语句
- break 中断
- continue 继续
- return 返回
跳转控制语句(break)
break的使用场景
- 在选择结构switch语句中
- 在循环语句中
- 离开使用场景的存在是没有意义的
break的作用
- 跳出单层循环
- 跳出多层循环
带标签的跳出
格式: 标签名: 循环语句 标签名要符合Java的命名规则
class BreakDemo {
public static void main(String[] args) {
//在 switch 或 loop 外部中断
//break;
//跳出单层循环
for(int x=0; x<10; x++) {
if(x == 3) {
break;
}
System.out.println("HelloWorld");
}
System.out.println("over");
System.out.println("-------------");
wc:for(int x=0; x<3; x++) {
nc:for(int y=0; y<4; y++) {
if(y == 2) {
//break nc;
break wc;
}
System.out.print("*");
}
System.out.println();
}
}
}
跳转控制语句(continue)
continue的使用场景
- 在循环语句中
- 离开使用场景的存在是没有意义的
continue的作用
- 单层循环对比break,然后总结两个的区别
- break 退出当前循环
- continue 退出本次循环
- 单层循环对比break,然后总结两个的区别
/*
continue:继续
使用场景:
循环中。离开此场景无意义。
测试,找到和break的区别:
break:跳出单层循环
continue:跳出一次循环,进入下一次的执行
练习题:
for(int x=1; x<=10; x++) {
if(x%3==0) {
//在此处填写代码
}
System.out.println(“Java基础班”);
}
我想在控制台输出2次:“Java基础班“
break;
我想在控制台输出7次:“Java基础班“
continue;
我想在控制台输出13次:“Java基础班“
System.out.println(“Java基础班”);
*/
class ContinueDemo {
public static void main(String[] args) {
for(int x=0; x<10; x++) {
if(x == 3) {
//break;
continue;
}
System.out.println(x);
}
}
}
跳转控制语句(return)
- return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解。