Java流程控制

Java流程控制

1.基本介绍
在程序中,程序运行的流程控制决定程序是如何运行的,是我们必须要掌握的。
2.分类
主要有三大流程控制语句:
①顺序控制
②分支控制
③循环控制

一、顺序控制

1.基本介绍
程序从上到下逐级运行,中间没有任何判断和跳转。(程序默认的一个控制顺序)

2.流程图:
在这里插入图片描述
3.顺序控制举例和注意事项
Java中定义变量时采用合法的前向引用。如
正确的写法:

public class Demo01{
    int n1 = 1;
    int n2 = n1+1;
}

错误的写法:

public class Demo01{
    int n2 = n1+1;
    int n1 = 1;
}

二、分支控制 if - else if - else

1.介绍
让程序有选择的执行,分支控制有4种:
①单分支控制
②双分支控制
③多分支控制
④switch分支结构

1)单分支

1.基本语法
if (条件表达式) {
  执行代码块;(可以多条语句)
}
tip:当条件表达式为true时,就会执行{}里的代码。如果为false就不执行,此外如果if后面只有一条语句,则可以不写{}。

编写一个程序,可以输入分数,如果分数大于等于90分,则输出"考试结束, 成绩合格",代码演示:

Scanner scanner = new Scanner(System.in);
System.out.println("请输入考试成绩: ");
int score = scanner.nextInt();
if (score >= 90) {
    System.out.println("考试结束, 成绩合格");
}

2.单分支对应的流程图
在这里插入图片描述

2)双分支

1.基本语法
if (条件表达式) {
  执行代码块1;(可以多条语句)
} else {
  执行代码块2;
}
说明:当条件表达式成立时,执行if里面的代码块,否则执行else里面的代码块。同样的,如果执行的代码块只有一条语句,则{}可以省略。否则不能省略。
2.编写一个程序如果,可以输入分数,如果成绩大于等于90分,则输出"考试结束, 成绩合格",否则输出"考试结束, 成绩不合格",代码如下。

Scanner scanner = new Scanner(System.in);
System.out.println("请输入考试成绩: ");
int score = scanner.nextInt();
if (score >= 90) {
    System.out.println("考试结束, 成绩合格");
} else { //双分支
    System.out.println("考试结束, 成绩不合格");
}

3.流程图:
在这里插入图片描述

3)多分支

1.基本语法
if(条件表达式1){
  执行代码块1;
} else if {
  执行代码块2;
}

else {
  执行代码块n;
}

Tips:
①多分支,可以没有else,如果所有表达式条件都不成立,则一个入口也没有
②如果有else,如果所有条件表达式都不成立,则默认执行else里的代码块。

2.编写一个程序,如果成绩小于60分,不及格;[60,70),及格;[70,85),良好;[85,100],优秀;键盘输入成绩,判断信息。代码如下:

System.out.println("请输入芝麻信用分:");
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
if (score <60){
    System.out.println("不及格");
} else if (score >= 60 && score <70){
    System.out.println("及格");
} else if (score>=70 && score <85){
    System.out.println("良好");
} else if (score>=85 && score<=100){
    System.out.println("优秀");
} else {
    System.out.println("成绩输入有误");
}

3.流程图:
在这里插入图片描述

4)嵌套分支

1.基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构成为外层分支。 规范:不要嵌套超过3层(原因:可读性差)

2.基本语法
if(){
  if(){
     //if-else
  }else{
     //if-else
  }
}
3.编写一个程序,如果一个比赛,如果初试成绩大于60分进入复赛;否则淘汰,并且根据性别分为男子组,与女子组。键盘输入成绩和性别,判断信息。代码如下:

Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int score = scanner.nextInt();
if (score >= 60){
   System.out.println("请输入性别");
   char gender = scanner.next().charAt(0);
   if (gender == '男'){
       System.out.println("男子组");
   }else {
       System.out.println("女子组");
   }
}else {
   System.out.println("淘汰");
}

5)switch分支结构

1.基本语法
switch(表达式){
  case 常量1:
     代码块1;
     break;

   case 常量n:
    代码块n;
    break;
   default:
    default代码块;
    break;
Tips:
①switch关键字,表示switch分支
②表达式对应一个值
③case 常量1:当表达式的值等于常量1,就执行代码块1
④break:表示退出switch
⑤如果和case常量1匹配,就执行代码块1,如果没有匹配成功,就继续匹配case常量2,以此类推。
⑥如果一个都没有匹配成功,就执行default

2.路程图
在这里插入图片描述
3.编写一个程序,该程序可以接收一个数字。1,2,3,4,5,6,7。其中1表示星期1,2表示星期二…。代码如下:

Scanner scanner = new Scanner(System.in);
System.outint.println("请输入数字");
int num1 = scanner.nextInt();
switch (num1){
    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;
}

4.细节
1.表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的。代码如下:

int num1 = 1;
switch (num1) {
    case a: // 报错
        System.out.println("hh");
        break;
    case 2:
        System.out.println("6879");
        break;
    default:
        System.out.println("hh6879");
        break;
}

2.switch(表达式)中表达式的返回值必须是:(byte,short, int,char,enum,String)类型。代码如下:

double num2 = 1.2;
switch (num2) { // 报错
    case 1.2:
        System.out.println("hh");
        break;
    case 2:
        System.out.println("6879");
        break;
    default:
        System.out.println("hh6879");
        break;
}

3.case子句中的值必须是常量,而不能是变量。代码如下:

int num3 = 1;
switch (num3) {
    case num3: // 报错
        System.out.println("hh");
        break;
    case 2:
        System.out.println("6879");
        break;
    default:
        System.out.println("hh6879");
        break;
}

4.default子句是可选的,当没有匹配的case时,执行default。代码如下:

int num4 = 4;
switch (num4) {
    case 1:
        System.out.println("hh");
        break;
    case 2:
        System.out.println("6879");
        break;
    default:
        System.out.println("hh6879");
        break;
}
// 输出结果为:hh6879

5.break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写 break,程序会顺序执行到switch结尾。代码如下:

int num5 = 1;
switch (num5) {
    case 1:
        System.out.println("hh");
    case 2:
        System.out.println("6879");
    default:
        System.out.println("hh6879");
}
// 输出结果为:hh
// 6879
// hh6879

6)switch和if

1.如果判断的具体数值不多,而且符号byte,short,int,char,enum,String这6种类型。建议使用switch语句。
2.其他情况,对区间的判断,和对结果为boolean类型判断,使用if。if的适用范围更广

三、循环控制

1.基本介绍
循环控制,就是要让你的代码可以循环的执行。

1)for循环控制

1.基本语法
for(循环变量初始化;循环条件;循环变量迭代){
   循环操作(语句);
}
Tips:
①for关键字,表示循环控制
②for有四个要素:循环变量初始化,循环条件,循环操作,循环变量迭代
③循环操作如果只有一条语句,那么{}可以省略

2.写一个程序,循环输出第几次输出"hh6879",输出10次。代码如下:

for (int i = 1;i <= 10;i++){
System.out.println("第"+i+"次hh6879");

3.流程图
在这里插入图片描述
4.for细节
①for中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。代码示例如下:

int i = 1;
for (;i<=10;){
    System.out.println("第"+i+"次hh6879");
    i++;
}

Tips:循环条件也可以省略,省略之后变成无限循环。代码如下:

for (;;){
    System.out.println("hh6879");
}

②循环条件是返回一个布尔值的表达式
③循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开, 循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。代码如下:

int num1 = 4;
for (int i1 =0,j = 0; i1 < num1; i1++, j+=2){
    System.out.println("i1 ="+i1+" j= "+j);
}

2)while循环控制

1.基本语法
循环变量初始化
while(循环条件){
  循环体(语句);
  循环变量迭代;
}
Tips:
①while与for一样,也有循环四要素。
②但是while与for四要素的位置不一样
③while与for一样写死循环,省略循环变量迭代就可以了。

2.写一个程序,循环输出第几次输出"hh6879",输出10次。代码如下:

int i =0;
while (i <= 10) {
    System.out.println("第"+i+"次hh6879");
    i++;
}

3.流程图
在这里插入图片描述
4.while细节
①while和for一样,循环条件都是返回一个布尔值的表达式
②while循环是先判断再执行语句(与do…whlie相反)

3)do…while循环控制

1.基本语法
循环变量初始化
do{
  循环体(语句);
  循环变量迭代;
}while(循环条件);
Tips:
①do while都是关键字
②与前面的一样,do…whlie也有循环四要素,只是位置不一样。
③先执行再判断,也就是说do里的语句至少执行一遍。(与while不一样)
④最后有一个分号;

2.写一个程序,循环输出第几次输出"hh6879",输出10次。代码如下:

int i = 0;
do {
    System.out.println("第"+i+"次hh6879");
    i++;
} while (i <= 10);

3.流程图
在这里插入图片描述
4.细节
①与前面一样,循环条件是返回一个布尔值的表达式。
②do…while循环是先执行,在判断,因此至少执行一次。

4)嵌套循环控制

1.基本介绍
①当一个循环放在另一个循环内,就形成了嵌套循环。其中for,while,do…while均可以作为外层循环和内层循环。 同分支嵌套一样,建议一般使用两层,不要超过三层,否则代码可读性很差。
②实质上,嵌套循环就是内层循环被当作了外层循环的循环体。只有内层循环的循环条件为false的时候,才会跳出内层循环,才可以结束本次外层循环,开始下一次循环。
③设外层循环次数为m,内层循环次数为n,则内层实际上需要执行m*n次。代码示例如下:

for(int i = 1; i <= 4; i++){ // 外层循环:4次
	for (int j =1;j<=3; j++){ // 内层循环:3次
		System.out.println("hh6879"); // 一共 3*4 = 12 次
	}
}

四、跳转控制语句

1)break

1.为什么需要跳转控制?
  因为当我们需要循环解决问题,但是循环的次数不确定时,需要当满足某些条件时,终止循环。这时候就需要流程控制语句了。
2.基本介绍
break语句用于终止某个语句块的执行,一般使用在switch或者循环中。
3.基本语法
{  …
  break;
  …
}

4.写一个程序,10次输出第几次hh6879,输出到第四次就终止。代码如下:

for (int i = 1; i<= 10 ; i++){
    if (i == 5){
        break;
    }
    System.out.println("第"+i+"次hh6879");
}

5.流程图(以while为例)

在这里插入图片描述
6.细节
①break语句出现在多层嵌套语句时,可以通过标签指明要终止那一层的语句块。
②标签的使用
label1 :{ …
label2 :  {…
label3 :    {…
        break label2;
        }
      }
    }
TIps:
①break可以指定退出哪层
②label是标签,由程序员指定。只要是符合规则的命名都可以
③break 指定到那个标签就退到那里
④在实际使用中,尽量不要使用标签。
⑤如果没有指定标签,break默认退出最近的循环体

标签代码演示如下:

label1:
for (int j =0 ; j < 4;j++){//外层for
label2:
    for (int i = 0 ;i < 10;i++){//内层for
        if (i == 2){
            break ; //等价于 break label2
        }
        System.out.println("i ="+ i);
    }
}

输出结果为:

//i =0
//i =1
//i =0
//i =1
//i =0
//i =1
//i =0
//i =1

2)continue

1.基本介绍
①与break不同,continue用于结束本次循环,继续执行下一次循环,而不是直接跳出循环体。
②continue也和break一样,可以通过标签来指定要跳过的是那一层的循环,规则通前面一样。这里不写了。
2.基本语法
{  …
  continue;
  …
}
3.写一个程序,10次输出第几次hh6879,输出到第五次就跳过。代码如下:

for (int i = 1; i<= 10 ; i++){
    if (i == 5){
        continue;
    }
    System.out.println("第"+i+"次hh6879");
}

运行结果如下:

//运行结果如下:
//第1次hh6879
//第2次hh6879
//第3次hh6879
//第4次hh6879
//第6次hh6879
//第7次hh6879
//第8次hh6879
//第9次hh6879
//第10次hh6879

4.流程图(以while为例)
在这里插入图片描述

5.细节
①continue的标签与break标签的用法一样,不过要记得continue是本次,break是本层。代码示例,如下:

label1:
for (int j =0 ; j < 4;j++){//外层for
label2:
    for (int i = 0 ;i < 10;i++){//内层for
        if (i == 2){
            continue label1; //直接让j加了1
        }
        System.out.println("i ="+ i);
    }
}

运行结果如下:

//运行结果如下: 
//i =0
//i =1
//i =0
//i =1
//i =0
//i =1
//i =0
//i =1

3)return

1.基本介绍
return表示跳出所在的方法,在讲方法时细说。这里简单提一下。要注意return写在main方法中执行到的时候会退出程序。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值