Java基础知识04

6、控制结构

6.1 概念

  用于控制程序运行

6.2 分类

  主要分为顺序结构、分支结构和循环结构

6.2.1 顺序结构

  用最常用、最基本的语句结构,从上到下、从左到右执行程序。

6.2.2 分支结构

1、if else 判断语句
格式一:
  if(判断条件){//注意:判断条件必须是boolean类型的
   当判断条件成立时,要执行的代码块;
  }

		int i = 2;
        if (i > 0){
            System.out.println(i + "大于0");
        }

格式二:
  if(判断条件){
   当判断条件成立时,要执行的代码块;
  }else{
   当判断条件不成立时,要执行的代码块;
  }

		int i = 2;
        if (i > 0){
            System.out.println(i + "大于0");
        }else {
            System.out.println(i + "小于等于0");
        }

格式三:
  if(判断条件1){
   当判断条件1成立时,要执行的代码块;
  }else if(判断条件2){
   当判断条件1不成立,且判断条件2成立时,要执行的代码块;
  }else if(判断条件3){
   当判断条件1、2都不成立,且判断条件3成立时,要执行的代码块;
  }
  ……
  }else{
   当上述所有判断条件都不成立时,要执行的代码块;
  }

		int i = -1;
        if (i > 0){
            System.out.println(i + "大于0");
        }else if (i == 0){
            System.out.println(i + "等于0");
        }else {
            System.out.println(i + "小于0");
        }

2、switch case选择语句
格式:
  switch(值){
   case 值1:
    当值和值1匹配时,要执行的代码块;
    break;
   case 值2:
    当值和值2匹配时,要执行的代码块;
    break;
   ……
   case 值n:
    当值和值n匹配时,要执行的代码块;
    break;
   default:
    当值和所有case后的值都不匹配时,要执行的代码块;
  }

		int n = 0 ;
        switch (n){
            case 0:
                System.out.println("n的值为0");
                break;
            case 1:
                System.out.println("n的值为1");
                break;
            default:
                System.out.println("n的值不在规定范围内!");
        }

运行结果:

		n的值为0

注意:
(1)switch和case都是关键字;
(2)switch支持匹配的值的类型是有限制的:可以是byte、short、int、char、JDK1.7及其之后支持String类型;
(3)case穿透:即当值和某个case匹配成功时,执行了当前case的代码块,还将之后的所有代码块都执行了,如下代码所示:

		int n = 0 ;
        switch (n){
            case 0:
                System.out.println("n的值为0");
            case 1:
                System.out.println("n的值为1");
            default:
                System.out.println("n的值不在规定范围内!");
        }

运行结果:

		n的值为0
		n的值为1
		n的值不在规定范围内!

  因为缺少break;语句,导致一直执行case里面的代码块。break语句的作用是一旦执行了将结束整个switch case语句。

6.2.3 循环结构

  循环四要素:初始化条件语句、循环条件、循环体、改变循环条件的语句。
1、while循环
格式:
 初始化条件语句;//用来定义一个循环变量
 while(循环条件){ //使用循环变量构建一个结果为布尔值的表达式
  循环体; //每次循环都要执行的代码块
  改变循环条件的语句; //改变循环条件,从而实现在某个点来结束循环
 }
执行流程:
  情况一:初始化条件语句—>循环条件—>循环条件为true,则执行循环体—>改变循环条件的语句—>重新回到while循环条件继续循环;
  情况二:初始化条件语句—>循环条件—>循环条件为false,则结束循环。
应用场景:
  如果不确定循环的次数,则适合使用while循环。
2、do while循环
格式:
 初始化条件语句;
 do{
  循环体;
  改变循环条件的语句;
 }while(循环条件);
执行流程:
  情况一:初始化条件语句—>循环条件—>改变循环条件的语句—>为true则执行循环体—>重新回到while的循环条件;
  情况二:初始化条件语句—>循环条件—>改变循环条件的语句—>为false则循环结束。
应用场景:
  如果在循环之前需要先执行一次循环体,则适合使用do while循环。

注意:while和do while的区别
 while是先执行循环条件,do while无论是否符合循环条件都会循环一次;

3、for循环
格式:
 for(初始化条件语句;循环条件;改变循环条件的语句){
  循环体;
 }
执行流程:
  情况一:先执行初始化条件语句—>循环条件—>循环条件为true,则执行循环体—>改变循环条件语句—>重复循环条件……
  情况二:先执行初始化条件语句—>循环条件—>循环条件为false,则循环结束。
应用场景:
  如果确定循环次数,则适合使用for循环

4、关于循环变量的作用域
  大括号“{}”表示范围,变量所属的大括号的范围就是变量的作用域(就近原则);
  在循环中定义的变量仅能在循环中使用,属于局部变量,出去循环则无法使用;但在main方法中的定义的变量,既可以在main方法中使用,也可以在循环中使用;
  在同一个作用域中变量名不能重复,但是不同循环/作用域中变量名可以一样。
5、死循环:无限循环,不能结束
 (1)while( true ){ 循环体; }

		 while (true){
            System.out.println("hello");
       	 }//不会报错,无限循环
		while (true){
            System.out.println("hello");
        }
        System.out.println("world");//加上一条输出语句,则编译时会报错
        //因为while是死循环,会一直执行,所以死循环下面的语句无法执行,所以编译时会报错
		boolean flag = true;
        while (flag){
            System.out.println("hello");
        }
        System.out.println("world");
        //该情况也不会报错,因为变量在编译时只能校验变量的数据类型,无法确定具体的值,所以该程序会一直循环执行“hello”,不会执行到“world”,但不会报错。

 (2)for( ; ; ){循环体;}

		for (;;){
            System.out.println("hello");
        }//死循环不会报错,会一直执行“hello”
		for (;;){
            System.out.println("hello");
        }
        System.out.println("world");
        //在死循环外,加上输出语句,编译时会报错
        //因为该for循环在编译时可以确定它是死循环,所以可以判定“world”永远不会被输出,所以会报错
		for (int num = 0 ;num < 10;){
            System.out.println("hello");
        }
        System.out.println("world");
        //给for循环加上“循环变量”和“判断条件”,但是不给for循环加“改变循环条件的语句”,也是一个死循环,但在循环外加上输出语句不会报错。因为在编译时不法确定该for循环为死循环,所以在循环外加上输出语句不会报错。

6、循环嵌套
格式:(以for循环为例)
 for(初始化条件语句1;循环条件1;改变循环条件的语句1){
  for(初始化条件语句2;循环条件2;改变循环条件的语句2){
   循环体;
  }
 }
  内层循环可以看作外层循环的循环体,只有在内层循环执行完之后,才会执行外层循环改变循环条件的语句。
7、循环的跳转语句
(1)break;
  用于循环中,执行到break语句后,直接结束整个循环。

		for (int i = 0; i < 5 ; i++) {
            if (i == 2){
                break;
            }
            System.out.println("hello" + i);
        }

运行结果:

		hello0
		hello1

  此外break语句还可以在switch case结构中使用;其次break语句不可以单独在if语句中使用,必须在循环中嵌套使用。

(2)continue;
  用于循环中,执行到continue语句后,跳出当次循环,继续下一次循环。

		for (int i = 0; i < 5 ; i++) {
            if (i == 2){
                continue;
            }
            System.out.println("hello" + i);
        }

运行结果:

		hello0
		hello1
		hello3
		hello4

(3)return
  是用于结束方法的关键字。
8、在循环嵌套中使用break
(1)在循环嵌套中,break和continue默认作用于他所属的离它最近的循环

		for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3 ; j++) {
                if (j == 2){
                    break;
                }
                System.out.println("i=" + i + ",j=" + j);
            }
        }

运行结果:

		i=0,j=0
		i=0,j=1
		i=1,j=0
		i=1,j=1
		i=2,j=0
		i=2,j=1

(2)可以给循环起名字,通过break跳出指定的循环

		Outer:for (int i = 0; i < 3; i++) {
            Inner:for (int j = 0; j < 3 ; j++) {
                if (j == 2){
                    break Outer;
                }
                System.out.println("i=" + i + ",j=" + j);
            }
        }

运行结果:

		i=0,j=0
		i=0,j=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值