Java流程控制语句

三种流程控制结构

1.选择结构:if(单分支、双分支、多分支),Switch
2.循环结构:for,while,do-while
3.顺序结构

流程控制语句之 if 语句

1. if单分支语句

语法:

if(boolean表达式){
	code...
}

程序执行到if语句 ,先判断 boolean表达式的值,如果是true ,则进入后面的大括号中执行里面的代码,如果为假 则 跳过后面的大括号

2.if双分支语句

语法:

  if(boolean表达式){
  		code1
  }else{
  		code2
  }

先判断 boolean表达式的值 如果为真 则执行code 1 如果为假 则执行code2

3.if多分支语句

语法:

  if(boolean表达式1){
  		code1..
  }else if(boolean表达式2){
  		code2..
  }else if(boolean表达式3){
  		code3....
  }
  ......
  else{
  	code n......
  }

先判断 if 后的 boolean表达式1 如果为真 则执行code1 后面的其他分支 全部跳过 ,如果 boolean表达式1 为假 则跳过code1 接着判断 boolean表达式2 如果 为真 则执行 code2
如果为假 则跳过code2 接着判断 boolean表达式3 … 如果 所有的 if 后的 表达式 都为假 则 执行 最后的else coden

练习题:
@Test
	public void test4() {
		//.输入 一个 年份  四位整数  ,输出 这个年份 是不是闰年
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入四位整数");
		int year = scanner.nextInt();
		//闰年  这个数除以4 余数为0 但是 除以100 余数不能为0    或者 这个数 除以400 余数为0 
		
		if((year%4==0&&year%100!=0) || (year%400==0)) {
			System.out.println(year+"是闰年");
		}else {
			System.out.println(year+"不是闰年");
			
		}
	}
	
	@Test
	public void test5() {
		// . 输入一个三位整数   判断这个数是不是水仙花数
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个三位的整数");
		int num = scanner.nextInt();
		
		int ge = num%10;
		int shi = num/10%10;
		int bai = num/100;
		int value = gegege+shishishi+baibaibai;
		
		if(value==num) {
			System.out.println("是水仙花数");
		}else {
			System.out.println("不是水仙花数");
			
		}
	}

流程控制语句 之 switch

语法:

switch(exp){
  		case value1:{
  			code 1;
  			break;
  		}
  		case value2:{
  			code 2;
  			break;
  		}
  		case value3:{
  			code 3;
  			break;
  		}
  		......
  		default:{
  			code n;
  			
  		}
  }

拿表达式的值 和 case 后的 value 进行匹配,如果匹配的上,就执行该case 后的大括号中的内容;如果大括号中有break 关键字,则中断switch case 语句,如果 exp的值和所有的 case 后的value都没有匹配上,则执行 default 后的内容。

break: 中断关键字

在 switch case 中的作用是中断匹配,一旦执行到break ,就会中断switch case 语句,
但是这里的break 关键字不是必须的 ,如果没有break 则会出现 switch 穿透现象, 会穿透到下一个case 后的大括号中执行, 而不进行匹配,有时会根据 switch 穿透这个特性实现某些功能

注意:

1.case 后的value 值不能重复
2.switch 后的表达式的值得类型支持(byte short char int String Enum)
3.default 语句可以省略

switch穿透
@Test
	public void test4() {
		// 随机一个小写的英文字母,判断这个字母是不是元音字母  
		char c = 'a';
		int num = (int) (Math.random()26);
		char c2 = (char) (c+num);
		switch(c2) {
			case 'a':
			case 'e':
			case 'i':
			case 'o':
			case 'u':{
				System.out.println("随机字母是元音字母"+c2);
				break;
			}
			default:{
				System.out.println(c2+"不是元音字母");
			}
		}
	}

流程控制语句 之 while

语法:

  while(boolean表达式){
  		循环体
  }

执行流程: 程序执行到while语句,先判断 boolean表达式的值,若表达式的值为真,则执行循环体的内容,执行完循环体之后,再次判断 boolean表达式的值,如果为真,则继续执行循环体,继续判断表达式的值 如此循环,直到表达式的值为假,则停止循环,若表达式的值 一直为真,则一直循环 。( 一般情况,要注意控制循环的终止条件,避免出现死循环)
循环结构的本质: 重复的执行循环体中的代码 直到不满足循环条件
循环结构:

  1. 初始化部分:指的是初始条件 一般是循环变量的初始值 通过该变量可以控制循环条件的真假 这个变量可以称为循环变量 (循环变量一般在boolean表达式中)
    循环条件: while后 小括号中的内容 是一个布尔表达式 每一次循环之前 都要先判断这个表达式的值 如果为真 则执行循环 如果为假 则跳过循环

  2. 循环体:大括号中的内容 就是循环体 可以是 一条语句 也可以是 多条语句

  3. 迭代部分: 通常是 循环体的一部分 用来改变循环变量的值 从而改变循环条件 boolean表达式的值
    关键点: 使用循环的时候 要对循环条件敏感 要知道什么时候终止循环

流程控制语句之do while

语法:

 do{
  	循环体
  	迭代部分 一般和循环体写在一起
  }while(循环条件);

先执行一次循环体 再判断循环条件 如果为真 则 继续执行循环体 如果为假 则 终止循环
和 while 对比
while是 先判断 循环条件 为真 则循环 为假 不循环
do while 是先执行一次循环体 为真 则循环 为假 不循环 意味着 do while 的循环体 至少执行一次

流程控制语句之 for

语法:

 for(初始化部分①;循环条件②;迭代部分③){
  		循环体 ④
  }

① ② ④ ③ ② ④ ③ ② ④ ③ …

执行流程:

  1. 先执行初始化部分 这部分只执行一次
  2. 再执行循环条件 这个循环条件是一个布尔表达式 如果为真 则执行循环体 如果为假 则结束循环
  3. 循环条件为真 执行循环体
  4. 循环体执行完 再执行迭代部分 迭代部分的代码一般会改变循环变量的值 从而改变循环条件的结果 以此来控制循环是否继续 , 也就是说 迭代部分执行完 ,再次执行循环条件 根据循环条件的结果 判断是否继续执行循环体 继续循环,for 循环都是先判断 后执行
注意:

循环变量的作用域问题 : 如果 是在 循环内部 声明的变量,那么循环变量的作用域就只在循环语句内有效超出循环语句 就无效 ,那么 如果想在for 循环外部 访问 循环变量怎么办? 可以把循环变量声明在 循环语句之外

多重循环 : 循环嵌套

一个循环体内又包含另一个完整的循环结构 ,任何两种循环都可以相互嵌套,可以任意层次循环,但是一般不超过3层。

多重循环执行过程
外层循环变量变化一次,内层循环变量要变化一遍
for(int i=0;i<vakue;i++){
		for(int j =0;j<value;j++){
			循环体
		}
	}
	------------------
	while(循环条件){
		for(int i=0;i<value;i++){
			循环体
		}
	}
多重循环
1.打印矩形
@Test
	public void test() {
		// 在控制台 输出 *  打印出 长10  宽5 的 矩形
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=10;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
2.10进制整数转二进制整数
@Test
	public void test() {
		//使用循环实现将10进值整数变成二进制数
		//算法: 采用 除以2 取余数   逆序排列
		int num =1024;
		String str="";
		while(num!=0) {
			int yu = num%2;  //  0 1 0 1
			str = yu + str;   
			num=num/2;
		}
		System.out.println(str);
	}
3.10进制小数转二进制小数
@Test
	public void test() {
		//使用循环实现将10进值小数变成二进制数
		//算法:十进制小数 乘以 2 取整数部分  正序排列   直到小数部分为0 
		// 用 十进制小数 乘以 2  得到一个 乘积   把积 的整数部分取出来,  再用2 乘以余下的小数   又得到一个积  再将积的整数部分取出   再用2 乘以小数部分 如此循环  直到小数部分为0 
		double d = 0.125;  // 0.25   0.5  1.0         0.875
		String str = "0.";  // 0.001
		while(d!=0) {
			double ji = d*2;
			int zs = (int) ji;
			str+=zs;
			d= ji- zs;
		}
		System.out.println(str);
	}
4.打印平行四边形
@Test
	public void test() {
		//打印平行四边形
		/*
		 *      *****
		 *     *****
		 *    ***** 
		 *   ***** 
		 * */
		
		for(int i=1;i<=5;i++) {
			for(int k=1;k<6-i;k++) {
				System.out.print(" ");
			}
			
			for(int j=1;j<=10;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
5.打印等腰三角形
@Test
	public void test() {
		// 打印等腰三角形
		/* 
		 *      *
		 *     ***
		 *    *****
		 *   *******
		 *  ********* 
		 * */
		
		for(int i=0;i<5;i++) {
			for(int k=1;k<6-i;k++) {
				System.out.print(" ");
			}
			
			for(int j=0;j<2*i+1;j++) {
				System.out.print("*");
			}
			
			System.out.println();
		}
	}
5.打印菱形
@Test
	public void test() {
		/*
		    *  控制台输出菱形
		 * 		*
		 *     ***
		 *    *****
		 *   *******
		 *  ********* 
		 *   *******
		 *    *****
		 *     ***
		 *      *	
		 * */
		
		for(int i=0;i<5;i++) {
			for(int k=1;k<6-i;k++) {
				System.out.print(" ");
			}
			
			for(int j=0;j<2*i+1;j++) {
				System.out.print("*");
			}
			
			System.out.println();
		}
		
		for(int i=0;i<4;i++) {
			//打印空格   //  i=0  2    i=1  3 
			for(int k=1;k<3+i;k++) {
				System.out.print(" ");
			}
			// 打印*
			for(int j=0;j<7-2*i;j++) {
				System.out.print("*");
			}
			
			System.out.println();
		}
		
	}
6.打印九九乘法表
@Test
	public void test() {
		// 控制台输出 99 乘法表
		/*
		 * 1*1 =1
		 * 1*2 =2 2*2=4
		 * 
		 * 
		 * */
		for(int i=1;i<=9;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print(j+"*"+i+"="+(i*j)+"\t");
			}
			
			System.out.println();
		}
		
	}
7.百钱买百鸡
@Test
	public void test() {
		// 百钱买百鸡  100 文钱 买100 只鸡  公鸡 五文一只  母鸡 三文一只  小鸡 一文三只   怎样才能买到100 只鸡
		/**
		 * 公鸡 i  母鸡 j  小鸡 k
		 * i+ j +k =100
		 * 5*i + 3*j + k/3=100
		 * 
		 * k%3==0
		 * 
		 * */
		
		for(int i=0;i<20;i++) {
			for(int j=0;j<33;j++) {
				for(int k=0;k<100;k++) {
					if((i+j+k==100)&&(5*i+3*j+k/3==100)&&(k%3==0)) {
						System.out.println("公鸡"+i+"只,母鸡"+j+"只,小鸡"+k+"只");
					}
				}
			}
		}	
	}

break : 中断

  1. 在 switch case 中使用, 中断 case 语句避免缓存穿透;
  2. 在任何循环语句中, 均可以使用break 中断循环,在循环中执行break 到语句,循环马上停止,后续代码不再执行;
  3. 注意: 如果在多重循环中 break 只中断 当前的循环

continue 继续

在循环语句中使用,用于中断某次循环,跳过这次循环的后续语句,接着执行下一次循环 ( 跳过本次循环,执行下次循环)

return 返回

使用场景: 在方法当中用于返回方法的返回值,或者表示方法到此结束!
当方法返回值不是 void 的时候,必须有 return 返回返回值;
当方法的返回值是 void 的时候 ,可以有return 表示方法到此结束, 也可以没有return !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值