Day3
流程控制:
在一个程序执行过程中,每一个语句都是顺序执行的。程序的流程对我们的结果有着直接的影响,很多时候我们要通过控制语句的执行顺序来实现我们想要实现的功能。
1、顺序执行
根据编写的代码,从上到下执行
2、判断语句
2.1、判断语句if
格式:
if(关系表达式){
语句体;
}
程序语句;
执行流程:先判断关系表达式的结果,如果结果为true,则执行语句体,如果结果为false,那么将跳过语句体。
2.2、判断语句if–else
格式:
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行顺序:首先判断关系表达式结果是否为true,如果为true,那么执行语句体1,如果为false,执行语句体2.
public class Hello {
//程序的入口
public static void main(String[] args) {
//判断给定的数据是奇数还是偶数
int a=1;
if(a%2==0){
System.out.println("a是偶数");
}else{
System.out.println("a是个奇数");
}
System.out.println("程序的结束!");
}
}
2.3、判断语句if…else if…
格式:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(关系表达式3){
语句体3;
}else{
语句体4;
}
执行流程:
首先判断表达式1结果是否为true,如果为true则执行语句体1,如果为false则开始判断表达式2,……直到最后一个表达式语句判断完成,和if–else类似。
public static void main(String[] args) {
//x>=3 y=2x+1;
//-1<=x<3 y=2x;
//x<-1 y=2x-1;
int x =3;
int y;
if (x>=3){
y=2*x+1;
}else if (x>=-1 && x<3){
y=2*x;
}else{
y = 2*x - 1;
}
System.out.println("y的值是:"+y);
}
2.4、语句练习
public static void main(String[] args) {
// 指定考试成绩,判断学生等级
// 90‐100 优秀
// 80‐89 好
// 70‐‐79 良
// 60‐69 及格
// 60以下 不及格
demo();
}
public static void demo(){
int score=100;
if(score<0||score>100){
System.out.println("你这个成绩输入有问题!");
}else if(score>=90&&score<=100){
System.out.println("你的成绩属于优秀!");
}else if(score>=80&&score<90){
System.out.println("你的成绩属于好!");
}else if(score>=70&&score<80){
System.out.println("你的成绩属于良!");
}else if(score>=60&&score<70){
System.out.println("你的成绩属于及格!");
}else{
System.out.println("你的成绩不及格!");
}
}
2.5、if语句和三元运算的转换
public static void main(String[] args){
int a=10;
int b=20;
//保存我们a和b中的最大值
int c;
if(a>b){
c=a;
}else{
c=b;
}
c=a>b?a:b;//和上面一样
}
3、选择语句
switch语句
格式:
switch(表达式){
case 常量值1:
break;
case 常量值2:
break;
case 常量值3:
break;
default:
语句体;
break;
}
执行流程:
首先比较表达式的值和case后的值是否一致,两者对应则会执行相关的语句,在执行过程中遇见break则会结束跳出,如过表达式的值和任何一个case都不匹配,则会执行default语句体的语句。
public static void main(String[] args) {
int weekday=6;
//switch语句
switch (weekday){
case 1:
System.out.println("星期一");break;
case 2:
System.out.println("星期二");break;
case 3:
System.out.println("星期三");break;
case 4:
System.out.println("星期四");break;
case 5:
System.out.println("星期五");break;
case 6:
System.out.println("星期六");break;
case 7:
System.out.println("星期日"); break;
default:
System.out.println("你输入的数字有误!");
break;
}
}
switch语句
表达式的类型: byte, short, int, char,enum(枚举)
jdk1.7后可以接受字符串
case的穿透性
在switch语句中,如果case后面不写break,将出现穿透现象,也就是不会判断下一个case的值,直接向后运行,直到遇见break或者整体switch结束。
4、循环语句
顺序结构的程序语句只能被执行一次,如果想要同样的操作执行多次,,就需要使用循环结构。
4.1、for循环(重点掌握)
格式:
for(初始化表达式1;布尔表达式2;步进表达式4){
循环体3;
}
执行流程:
1–2--3–4--2–3----------一直到不满足布尔表达式结束。
初始化表达式1:负责完成循环变量的初始化
布尔表达式2:负责判断是否满足循环条件,如果不满足则退出循环
循环体3:具体的执行的语句,即循环的语句
步进表达式:循环后,循环条件涉及的变量发生变化
循环练习:使用循环计算1-100之间的偶数和
public static void demo(){
int sum =0;
for (int i = 1; i <= 100; i++) {
if(i%2 == 0){
sum +=i;
}
}
System.out.println("1-100之间的偶数和:"+sum);
}
4.2、while循环(重点掌握)
格式:
初始化表达式1;
while(布尔表达式2){
循环体3;
步进表达式4;
}
执行流程:
1–2--3–4--2–3--4—直到不满足我们的布尔表达式时跳出循环
初始化表达式1:负责完成循环变量的初始化
布尔表达式2:负责判断是否满足循环条件,如果不满足则退出循环
步进表达式:循环后,循环条件涉及的变量发生变化
用while计算我们1-100的和
public static void demo(){
int sum=0;
int i=1;
while(i<=100){
sum +=i;
i++;
}
System.out.println("1到100的和为:"+sum);
}
4.3、do…while循环
初始化表达式0
do{
循环体1;
步进表达式2;
}while(布尔表达式3);
执行流程:
1–2--3–1--2–3—直到不满足布尔表达式条件
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
4.4、循环语句的区别
条件语句所控制的变量在for循环结束以后就不能再使用了,而while循环结束以后还可以使用我们的循环变量,原因是for循环结束,该变量从内存中消失,能够提高我们的内存的使用率。
以后遇到的题目,如果知道循环次数,选择用for循环,如果不知道循环的次数,则选择用while循环。
5、跳转语句
break
使用场景:终止我们的switch或者循环的时候。如果离开的我们的实用场景,没有任何意义。
continue
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
扩展
死循环:
也就是我们的循环条件中条件运算永远为true,死循环就是永远不会结束的循环,例如while(true){}
在后期开发中,会使用死循环的场景,比如我们需要读取用户的输入数据,但是不清楚用户会输入多少数据,此时我们会使用死循环结构,当用户不想输入数据时,就可以用break语句结束我们的循环。
嵌套循环
嵌套循环是指一个循环的循环体里包裹着另一个循环,当有for循环嵌套时,循环的总次数就是外循环的次数*内循环的次数
嵌套循环的格式:
for(初始化表达式1;循环条件2;步进表达式){
循环体1
for(初始化表达式2;循环条件3;步进表达式){
循环体
}
}
打印一个5*8的矩形
//打印一个5*8的矩形 5行 每行8个
//外循环
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 8; j++) {
System.out.print("*");
}
//内循环打印8个*,需要换一次行
System.out.println();
}
打印一个5行2n-1的三角形
for (int i = 1; i <=5 ; i++) {
for (int j = 5; j >i; j‐‐) {
System.out.print(" ");//打印空格
}
for (int k = 0; k <2*i‐1; k++) {
System.out.print("*");//打印三角
}
System.out.println();
}
九九乘法表
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i +"*" +j+ "="+i*j +" ");
}
System.out.println();
}//正九九乘法表
for (int i = 9; i >=1; i--) {
for (int j = 1; j<=i ; j++) {
System.out.print(i+"*"+j+"="+i*j+" ");
}
System.out.println();
}//反着的九九乘法表
扩展:
debug运行
关于i++的运算
int i = 0;
for (i++; i++<10; i++);
//for (i++; i<10,i++;i++);从i<10反推最右的i++为9,再循环一次
//比较(此时i=11)完后i记得+1
//i=12
System.out.println(++i);//13