第一章 流程控制
1.流程控制的分类
a.顺序结构:同一个方法中的代码一定是从上到下依次执行的
b.选择结构/判断结构
判断语句if,一共有三种格式:
格式一:
if(判断语句){
代码块;
}
....其他代码
执行流程:
当代码执行到if语句时,首先计算判断语句的结果
如果是true,那么执行代码块,如果是false跳过代码块
格式二:
if(判断语句){
代码块1;
} {
代码块2;
}
...其他代码
执行流程:
当代码执行到if语句时,首先计算判断语句的结果
如果结果是true,执行代码块1,如果是false,执行代码块2
注意: 代码块1和代码块2 有且仅有一个会执行
格式三:
if(判断语句1){
代码块1;
}else if(判断语句2){
代码块2;
}else if(判断语句3){
代码块3;
}.....else{
代码块n;
}
执行流程:
先判断 判断语句1 如果是true执行代码块1,执行之后整个if流程结束
再判断 判断语句2 如果是true执行代码块2,执行之后整个if流程结束
再判断 判断语句3 如果是true执行代码块3,执行之后整个if流程结束
依次类推....
如果以上所有的判断语句都是false,那么无条件执行else后面代码块n
注意: 以上代码块1到代码块n 有且仅有一个会执行
总结:
三种if分别什么时候使用?
如果只需要判断一种情况,那么用if的第一种格式
如果只需要判断两种情况,那么用if的第二种格式
如果需要判断多种情况,那么用if的第三种格式
选择语句switch 就一种格式:
格式:
switch(表达式/变量名){
case 固定值1:
代码块1;
break;
case 固定值2:
代码块2;
break;
case 固定值3:
代码块3;
break;
....
default: // 默认
代码块n;
break;
}
....其他代码
执行流程:
当代码执行到swtich时,首先计算表达式或者变量的值
取出表达式或者变量的值 与下面固定值进行匹配,如果相等,那么久执行后面的代码块
执行完之后,遇到了break,break含义是结束整个switch
如果所有的固定值都没有匹配的,那么无条件执行default后面的代码块n
注意1: 以上代码块1-代码块n 有且仅有一个会执行
注意2: switch(表达式)中表达式的数据类型,
JDK7之前的 byte short(char) int 枚举(enum)
JDK7之后新增 String
c.case的穿透
i.break能不能不写???可以不写
ii.如果删除了case后面的break那么出现"穿透现象"
什么叫穿透现象:
如果case后面没有break,那么会下一个case后的代码块,而不需判断
iii.使用case的穿透现象改造月份案例,可以达到简化代码的作用
d.循环结构
让一段代码反复的执行
所有的循环结构都有四部分组成:
①.定义性语句(计数器)
②.循环条件(控制循环是否继续)
③.循环体(循环要执行的那段代码)
④.增量/步进语句(让计算器计数)
循环结构之for
格式:
for(①.定义性语句(计数器);②.循环条件(控制循环是否继续);④.增量/步进语句){
③.循环体(循环要执行的那段代码)
}
....其他代码
执行流程:
① ---> ②③④ ---> ②③④ ---> ...--->②
练习1: 打印 10次 "我对面的后面爱凤姐"
// 计数器从0开始 那么 计数器<几 循环就是几次
for (int i = 0;i < 10;i++){
// 0 1 2 3 4 5 6 7 8 9
System.out.println("我对面的后面爱凤姐");
}
练习2:使用循环,打印1-100之间所有的整数
//1.明确循环次数
for (int i = 1; i<101;i++){
//2.分析规律:
/*
* i的值 要打印的值
* 1 1
* 2 2
* 3 3
* x x
* 规律:要打印的值 和 i的值是一样的
* */
/*
* i = 1 2 3 4 5....100
* 打印 = 1 ..... 100
* i 和 要打印的值一一对应
* */
System.out.println(i);
}
练习3:使用循环,打印1-100之间所有的整数的累加和:
//定义一个求和的变量名
int sum = 0;
//1.先想办法打印1-100
for (int i = 1;i < 101;i++) {
// i = 1 2 3 4... 100
//打印= 1 2 3 4....100
// System.out.println(i);
//2.把要打印的数,加到sum中
// sum = sum+i;
sum+=i;
/*
* sum = 1;
* sum = 1 + 2
* sum = 1 + 2 + 3;
* sum = 1 + 2 + 3 + 4
* ...
* sum = 1 + 2 + 3 + 4 ... 100
*
* */
}
//2.打印sum的值
System.out.println(sum);
练习4:使用循环,计算1-100之间的偶数和
//分步骤慢慢计算
//1.打印1-100所有的数
//2.求1-100的和
//3.求偶数和
int sum = 0;
for (int i = 1; i < 101; i++) {
//求偶数和
//判断偶数的条件
if(i % 2 == 0) {
sum += i;
}
}
//4.最后打印偶数和sum
System.out.println(sum);
循环结构之while
格式:
①计算器;
while(②循环条件){
③循环体;
④增量语句;
}
执行流程:
①--->②③④---->②③④--->②③④ -->.....->②
练习1:打印10次"HelloWorld"
//使用while
int i = 0;
while (i < 10) {
System.out.println("HelloWorld");
//千万别忘记++
i++;
}
练习2:计算1-100之间的奇数和
//计算器
int i = 1;
//求和变量
int sum = 0;
while(i < 101){
//判断是否为奇数
if(i % 2 == 1) {
//如果是加到sum中
sum += i;
}
i++;
}
//打印结果
System.out.println(sum);
循环结构之do...while
①.定义性语句
②.循环条件
③.循环体
④.增量/步进语句
格式:
①.定义性语句
do{
③.循环体
④.增量/步进语句
}while(②.循环条件);
执行流程:
①③④ ---> ②③④ --> ②③④---> ...--->②
do..while循环的特点: 无论循环条件是什么,都会先执行一次循环体
总结:for和while和do..while循环的区别
do..while(基本不用的): 循环体至少执行一次
for循环(最常用的):循环结束之后,计数器不能访问
while循环(偶合用用的):循环结束之后,计数器还可以继续使用
2.死循环
永不停止的循环
格式:
while(true){
循环体;
}
for(;;){
循环体;
}
如果没有循环体,那么大括号可以省略,但是必须用;结束
while (true);
for (;;);
3.跳出语句(循环控制语句)
break;
a.第一可以用于switch中,代表结束整个switch
b.第二可以用于循环中,立刻结束整个循环
continue;
只能用于循环,跳过本次循环
注意: break只能用于swtich和循环,不能用于if
4.嵌套循环
一个循环的循环体中又有另外一个循环
格式:
for(;;){
for(;;){
}
}
比如:
//从 2011年 到 2013年 这三年的每年365天
for(int j = 2011;j < 2014;j++) {
for(int i = 1;i<=365;i++){
System.out.println(j+"年,"+"第"+i+"天");
}
}
//从 2021年 到 2023年 这三年的每年12月
for(int i = 2021;i < 2024;i++) {
//12个月
for (int j = 1; j < 13; j++) {
//i代表年 j代表月
System.out.println(i+"年"+j+"月");
}
}
//打印图形
要求使用嵌套循环,打印以下图形:
* * * * *
* * * * *
* * * * *
for(int i = 0;i<3;i++){ //3行
//每行5个
for(int j = 0;j<5;j++) {
System.out.print("* ");
}
System.out.println();
}
总结: 内层循环体执行的次数 = 外层循环次数 * 内层循环的次数
---------------------
作者:吃茶去
来源:CSDN
原文:https://blog.csdn.net/weixin_41229776/article/details/83962282
版权声明:本文为博主原创文章,转载请附上博文链接!