Java中的流程控制

一、选择流程控制语句

1、顺序结构的基本使用

1.1、顺序结构概述

是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

图解。。。

又如代码。。。

public class OrderDemo {
	public static void main(String[] args) {
		System.out.println("开始");
		System.out.println("语句A");
		System.out.println("语句B");
		System.out.println("语句C");
		System.out.println("结束");
	}
}

2、if语句格式以及执行流程

2.1、if语句的格式一以及执行方式

if语句第一种格式:(关系表达式必须是boolean类型)

if(关系表达式){

          语句体

}

执行流程:

首先判断关系表达式看其结果是true,还是false

如果是true,就执行语句体

如果是false,就不执行语句体

/*
 * if语句有三种格式。
 * 
 * if语句格式1:
 * 		if(关系表达式) {
 * 			语句体;
 * 		}
 * 
 * 执行流程:
 * 		A:首先判断关系表达式看其结果是true还是false
 * 		B:如果是true,就执行语句体
 * 		C:如果是false,就不执行语句体
 */
public class IfDemo {
	public static void main(String[] args) {
		System.out.println("开始");
		// 定义两个变量
		int a = 10;
		int b = 20;

		if (a == b) {
			System.out.println("a等于b");
		}

		int c = 10;
		if (a == c) {
			System.out.println("a等于c");
		}

		System.out.println("结束");
        
        /* 语句体省略时,可以保留外面的大括号,也可以省略大括号.然后在末尾加上" ; " */
        boolean b = false;
        if(b);
        boolean b2 = false;
        if(b2){}
	}
}

注意:如果语句体只有一条语句,则可以省略条件语句中的"{ }",但是虽然这样没有语法错误,但是为了增强程序的可读性,最好不要省略。

2.2、if语句格式二以及流程(关系表达式必须是boolean类型)

if语句第二种格式:

if(关系表达式){

       语句体1;

}else{

        语句体2;

}

执行流程:

首先判断关系表达式,看其结果是true,还是false

如果是true,就执行语句体1

如果是false,就执行语句体2

/*
 * if语句格式2:
 * 		if(关系表达式) {
 * 			语句体1;
 * 		}else {
 * 			语句体2;
 * 		}
 * 
 * 执行流程:
 * 		A:判断关系表达式的值是true还是false
 * 		B:如果是true,就执行语句体1
 * 		C:如果是false,就执行语句体2
 */
public class IfDemo2 {
	public static void main(String[] args) {
		System.out.println("开始");
		// 判断给定的数据是奇数还是偶数
		// 定义变量
		int a = 100;
		// 给a重新赋值
		a = 99;

		if (a % 2 == 0) {
			System.out.println("a是偶数");
		} else {
			System.out.println("a是奇数");
		}

		System.out.println("结束");
	}
}

注意:对于if...else语句可以使用三元运算符对语句进行简化

           if(a > 0)

                  b = a;

           else

                   b = -a;

         可以简写成:

          b = a > 0 ? a:-a

2.3、if语句格式三以及执行流程(关系表达式必须是boolean类型)

if语句第三种格式:

if(关系表达式){

         语句体1;

}else if(关系表达式2){

          语句体2;

}

......

执行流程:

首先判断关系表达式1,看其结果是true,还是false

如果是true,就执行语句体1

如果是false,就继续判断关系表达式2,看其结果是true,还是fasle

如果是true,就执行语句体2

如果是false,就继续判断关系表达式......看其结果是true,还是false

.......

如果没有任何关系表达式为true,就执行语句体n + 1

/*
 * if语句格式3:
 * 		if(关系表达式1) {
 * 			语句体1;
 * 		}else if(关系表达式2) {
 * 			语句体2;
 * 		}else if(关系表达式3) {
 * 			语句体3;
 * 		}
 * 		...
 * 		else {
 * 			语句体n+1;
 * 		}
 * 
 * 执行流程:
 * 		A:首先判断关系表达式1看其结果是true还是false
 * 		B:如果是true,就执行语句体1
 * 		     如果是false,就继续进行关系表达式2的判断看其结果是true还是false
 * 		C:如果是true,就执行语句体2
 * 		   如果是false,就继续进行关系表达式...的判断看其结果是true还是false
 * 		...
 * 		D:如果没有一个为true的,就执行语句体n+1
 * 
 * if语句的三种格式:
 * 		第一种格式适合做一种情况的判断
 * 		第二种格式适合做二种情况的判断
 * 		第三种格式适合做多种情况的判断
 */
public class IfDemo3 {
	public static void main(String[] args) {
		// x和y的关系满足如下:
		// x>=3 y = 2x + 1;
		// -1<=x<3 y = 2x;
		// x<=-1 y = 2x – 1;
		// 根据给定的x的值,计算出y的值并输出。

		// 定义变量
		int x = 5;
		
		/*
		int y;
		if (x >= 3) {
			y = 2 * x + 1;
		} else if (x >= -1 && x < 3) {
			y = 2 * x;
		} else if (x <= -1) {
			y = 2 * x - 1;
		}else {
			y = 0;
		}
		*/
		
		int y = 0;
		if (x >= 3) {
			y = 2 * x + 1;
		} else if (x >= -1 && x < 3) {
			y = 2 * x;
		} else if (x <= -1) {
			y = 2 * x - 1;
		}
		
		System.out.println("y的值是:"+y);
	}
}

注意:if语句只执行条件为真的命令语句,其他语句都不会执行。

3、switch语句的格式及执行流程

switch表示这是switch语句

           表达式的取值:byte、short、int、char

           JDK5以后可以是枚举

           JDK7以后可以是String

            case后面跟的是要和表达式进行比较的值

            语句体部分可以是一条或多条语句

            break表示中断,结束的意思,可以结束switch语句

            default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

执行流程

        首先计算出表达式的值

        其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

        最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

流程图

         

案例

import java.util.Scanner;

/*
 * 执行流程:
 * 		A:计算出表达式的值
 * 		B:拿计算出来的值和case后面的值依次比较,一旦有对应的值,就执行该处的语句,在执行过程中,遇到 break,就结束。
 * 		C:如果所有的case都不匹配,就会执行default控制的语句,然后结束。
 * 需求:
 * 		根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。
 */
public class SwitchDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//接收数据
		System.out.println("请输入一个数字(1-7):");
		int weekday = sc.nextInt();
		
		//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语句,case的常量值必须互不相同。在switch语句中,case语句后常量表达式的值可以的值可以为整数,但绝不可以是实数。例如,下面的代码是不合法的----------------case  1.1

二、循环流程控制语句

2、for循环的格式及基本使用

for循环格式:

          for(初始化语句;判断条件语句;控制条件语句){

                    循环体语句;

           }

执行流程:

      A:执行初始化语句

      B:执行判断条件语句,看其结果是true,还是false

             如果是fasle,循环结束。

             如果是true,继续执行。

      C:执行循环体语句

       D:执行控制条件语句

       E:回到B继续

流程图:

案例1:

/*
 * 需求:获取数据1-5和5-1
 */
public class ForTest {
	public static void main(String[] args) {
		//原始做法
		System.out.println(1);
		System.out.println(2);
		System.out.println(3);
		System.out.println(4);
		System.out.println(5);
		System.out.println("-------------");
		
		//用循环改进
		for(int x=1; x<=5; x++) {
			System.out.println(x);
		}
		System.out.println("-------------");
		
		//1-5的数据我们获取到了,如何获取5-1呢?
		for(int x=5; x>=1; x--){
			System.out.println(x);
		}
	}
}

案例2:

/*
 * 需求:求出1-5之间数据之和
 * 
 * 分析:
 * 		A:定义求和变量,初始化值是0
 * 		B:获取1-5之间的数据,用for循环实现
 * 		C:把每一次获取到的数据,累加起来就可以了
 * 		D:输出求和变量即可
 */
public class ForTest2 {
	public static void main(String[] args) {
		//定义求和变量,初始化值是0
		int sum = 0;
		
		//获取1-5之间的数据,用for循环实现
		for(int x=1; x<=5; x++) {
			//把每一次获取到的数据,累加起来就可以了
			//sum = sum + x;
			/*
			 * 第一次:sum = 0 + 1 = 1
			 * 第二次:sum = 1 + 2 = 3
			 * 第三次:sum = 3 + 3 = 6
			 * 第四次:sum = 6 + 4 = 10
			 * 第五次:sum = 10 + 5 = 15
			 */
			sum += x;
		}
		
		//输出求和结果
		System.out.println("sum:"+sum);
	}
}

案例3:

/*
 * 需求:在控制台输出所有的”水仙花数”
 * 
 * 分析:
 * 		什么是水仙花数呢?
 * 			所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
 *			举例:153就是一个水仙花数。
 *			153 = 1*1*1 + 5*5*5 + 3*3*3
 *
 *		A:三位数其实就告诉了我们水仙花数的范围
 *			100-999
 *		B:如何获取一个数据的每一个位上的数呢?
 *			举例:我有一个数据153,请问如何获取到个位,十位,百位
 *			个位:153%10 = 3;
 *			十位:153/10%10 = 5;
 *			百位:153/10/10%10 = 1;
 *			千位:...
 *			万位:...
 *		C:让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出
 */
public class ForTest4 {
	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;
			
			//让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出
			if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
				System.out.println(x);
			}
		}
	}
}

案例4:

/*
 * 需求:统计”水仙花数”共有多少个
 * 
 * 分析:
 * 		A:定义统计变量,初始化值是0
 * 		B:获取三位数,用for循环实现
 * 		C:获取三位数的个位,十位,百位
 * 		D:判断这个三位数是否是水仙花数,如果是,统计变量++
 * 		E:输出统计结果就可以了
 */
public class ForTest5 {
	public static void main(String[] args) {
		//定义统计变量,初始化值是0
		int count = 0;
		
		//获取三位数,用for循环实现
		for(int x=100; x<1000; x++) {
			//获取三位数的个位,十位,百位
			int ge = x%10;
			int shi = x/10%10;
			int bai = x/10/10%10;
			
			//判断这个三位数是否是水仙花数,如果是,统计变量++
			if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
				count++;
			}
		}
		
		//输出统计结果就可以了
		System.out.println("水仙花数共有:"+count+"个");
	}
}

案例5:

/*
 * 关系运算符:(冒泡排序)
 * 		==,!=,>,>=,<,<=
 * 		关系运算符的结果是boolean类型。
 * 
 * 注意:
 * 		千万不要把==写成=
 */
public class First {
	public static void main(String[] args) {
		int[] array = {73,80,62,93,96,87};
		for(int i=0;i<array.length-1;i++) {
			for(int j=0;j<array.length-1-i;j++) {
				if(array[j]<array[j+1]) {
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(array));
	}
}

3、while循环的格式及基本使用

while循环的格式

        while(判断条件语句){

                 循环体语句;

         }

扩展格式:

         初始化语句;

         while(判断条件语句){

                  循环体语句;

                  控制条件语句;

          }

流程图:

案例1:

/*
 * while循环语句的基本格式:
 * 		while(判断条件语句) {
 * 			循环体语句;
 * 		}
 * 扩展格式:
 * 		初始化语句;
 * 		while(判断条件语句) {
 * 			循环体语句;
 * 			控制条件语句;
 * 		}
 * 
 * 回顾for循环的语句格式:
 * 		for(初始化语句;判断条件语句;控制条件语句) {
 * 			循环体语句;
 * 		}
 */
public class WhileDemo {
	public static void main(String[] args) {
		//输出10次HelloWorld

		for(int x=1; x<=10; x++) {
			System.out.println("HellloWorld");
		}
		
		//while循环实现
		int x=1;
		while(x<=10) {
			System.out.println("HellloWorld");
			x++;
		}
	}
}

案例2:

/*
 * 求1-100之和。
 * 练习:统计水仙花个数。
 */
public class WhileTest {
	public static void main(String[] args) {
		//回顾for循环实现
		
		/*
		//定义求和变量
		int sum = 0;
		//获取1-100之间的数据
		for(int x=1; x<=100; x++) {
			//累加
			sum += x;
		}
		System.out.println("1-100的和是:"+sum);
		*/
		
		//while循环实现
		//定义求和变量
		int sum = 0;
		int x = 1;
		while(x<=100) {
			sum += x;
			x++;
		}
		System.out.println("1-100的和是:"+sum);
	}
}

4、do...while循环的格式及基本使用

基本格式:

       do{

       循环体语句; 

}while{判断条件语句};

扩展格式:

        初始化语句;

        do{

              循环体语句;

              控制条件语句;

        }while(判断条件语句);

流程图:

案例1:

/*
 * do...while循环的基本格式:
 * 		do {
 * 			循环体语句;
 * 		}while(判断条件语句);
 * 扩展格式:
 * 		初始化语句;
 * 		do {
 * 			循环体语句;
 * 			控制条件语句;
 * 		}while(判断条件语句);
 * 执行流程:
 * 		A:执行初始化语句;
 * 		B:执行循环体语句;
 * 		C:执行控制条件语句;
 * 		D:执行判断条件语句,看是true还是false
 * 			如果是true,回到B继续
 * 			如果是false,就结束
 * 
 * 练习:
 * 		求和案例
 * 		统计水仙花个数
 */
public class DoWhileDemo {
	public static void main(String[] args) {
		//输出10次 HelloWorld
		/*
		for(int x=1; x<=10; x++) {
			System.out.println("HelloWorld");
		}
		*/
		
		//do...while改写
		int x=1;
		do {
			System.out.println("HelloWorld");
			x++;
		}while(x<=10);
	}
}

注意:三种循环的区别:

虽然可以完成同样的功能,但是还是有小区别:

do…while循环至少会执行一次循环体。

for循环和while循环只有在条件成立的时候才会去执行循环体

for循环语句和while循环语句的小区别:

使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

/*
 * 三种循环的区别:
 * 		A:do...while至少执行一次循环体
 * 		B:for,while循环先判断条件是否成立,然后决定是否执行循环体
 * 
 * for和while的小区别:
 * 		for循环的初始化变量,在循环结束后,不可以被访问。而while循环的初始化变量,是可以被继续使用的。
 * 		如果初始化变量,后面还要继续访问,就使用while,否则,推荐使用for。
 * 
 * 循环的使用推荐:
 * 		for -- while -- do...while
 */
public class DoWhileDemo2 {
	public static void main(String[] args) {
		/*
		int x = 3;
		while(x<3) {
			System.out.println("我爱林青霞");
			x++;
		}
		System.out.println("--------------");
		int y = 3;
		do {
			System.out.println("我爱林青霞");
			y++;
		}while(y<3);
		*/
		
		
		for(int x=1; x<=10; x++){
			System.out.println("爱生活,爱Java");
		}
		//这里的x无法继续访问
		//System.out.println(x);
		System.out.println("-----------------");
		
		int y = 1;
		while(y<=10) {
			System.out.println("爱生活,爱Java");
			y++;
		}
		System.out.println(y);
	}
}

三、控制循环语句

1、控制条件语句break

使用场景和作用

 ~break的使用场景:

                 在选择结构switch语句中

                 在循环语句中

  ~离开使用场景的存在是没有意义的

                  break的作用:跳出单层循环

注意:如果遇到循环嵌套的情况,break语句将只会使程序流程跳出包含他的最内层的循环结构,只跳出一层循环。。。

案例1:

/*
 * break:中断的意思
 * 使用场景:
 * 		A:switch语句中
 * 		B:循环中
 * 注意:
 * 		离开使用场景是没有意义的。
 * 作用:
 * 		跳出循环,让循环提前结束
 */
public class BreakDemo {
	public static void main(String[] args) {
		//break;
		
		for(int x=1; x<=10; x++) {
			if(x == 3) {
				break;
			}
			System.out.println("HelloWorld");
		}
	}
}

2、控制条件语句continue

~continue的使用场景:

在循环语句中

          离开使用场景是没有意义的

continue的作用:单层循环对比break,然后总结两者的区别

                             break     退出当前循环

                             continue        退出本次循环

案例1:

/*
 * continue:继续的意思
 * 使用场景:
 * 		循环中
 * 注意:
 * 		离开使用场景是没有意义的
 * 作用:
 * 		结束一次循环,继续下一次的循环
 * 区别:
 * 		break:退出循环
 * 		continue:结束一次循环,继续下一次的循环
 */
public class ContinueDemo {
	public static void main(String[] args) {
		//continue;
		
		for(int x=1; x<=10; x++) {
			if(x == 3) {
				//break;
				continue;
			}
			System.out.println("HelloWorld");
		}
	}
}

加油,北漂的人儿。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值