Java流程控制

Java笔记

百知教育学习 - 胡鑫喆 - Java流程控制(计算机执行语句的顺序)

01_if条件分支结构

  • 基本的if条件语句
    • 语法:
       
                  if(布尔表达式){
                         语句系列
                  }
                  else{
                          语句系列
                  }

布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。他可以是一个单出的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。与C语言不同不能写整数,只能放布尔表达式

语句系列(代码块):可选参数,可以是一条或多条语句,当表达式的值为true是执行这些语句。若语句系列只有一条语句,则可以省略条件语句中的“ { }”。

			package a1;
			import java.util.Scanner;
			public class TextIf{
				public static void main(String[] args){
					Scanner s = new Scanner (System.in);
					int n = s.nextInt();
					if(n % 2 == 0){
						System.out.println("偶数");
					}
					else System.out.println("奇数")	;
	 			}
			}

在这里插入图片描述

  • 多重if选择结构
    • 语法:
      				if(布尔表达式){
                 			代码块1
        			 }else if(布尔表达式){
                 			代码块2
        			 } else if(布尔表达式){
                			代码块3
      			  	 } else{
                			 代码块4
        			 }          

条件表达式1~条件表达式n:必要参数。可以有多个表达式组成,但最后返回的结果一定要为boolean类型

语句系列:可以是一条或多条语句,当条件表达式1的值为true时,执行语句序列1;当条件表达式2的值为true时,执行语句序列2;以此类推。当省略任意一组语句序列时,可以保留其外面的“ { } ”,也可以将“ { } ”替换为 “ ; ”。

			package a1;
			import java.util.Scanner;
			public class TextIf{
				public static void main(String[] args){
					Scanner s = new Scanner (System.in);
					int n = s.nextInt();
					if(n < 0) {
						System.out.println("数据错误");
						System.exit(0);//程序退出
					}else if(n <= 2) {
						System.out.println("婴儿");
					}else if(n <= 12) {
						System.out.println("儿童");
					}else if(n <= 30) {
						System.out.println("青年");
					}else {
						System.out.println("中年和老年");
					}
	 			}
			}   

在这里插入图片描述

     						如果使用并列if语句写出该结构,必须把n的范围写全
  • 嵌套if选择结构
    执行流程:当外层条件满足时,再判断内层条件
    注意:一个选择结构中,可嵌套另外一个选择结构(只要嵌套格式正确,支持任意组合)
    • 语法:
                if(外层表达式){
 						if(内层表达式){
                        		内层代码块1
                        }else{
                        		内层代码块2
                        }
                 }
                else{
                 	    外层代码块
                 }

02_switch_case结构

  • switch结构
    • 语法:
   						switch( int 表达式 ){
                        	case1:代码块1
                            case2:代码块2
                            dafualt:代码块3
                        }

int 表达式:只能用 byte,short,int,char( JDK1.7开始switch case结构支持字符串类型(1.7版本也叫 7.0)

					package a1;
					import java.util.Scanner;
					public class TextSwitch{
						public static void main(String[] args){
							Scanner s = new Scanner (System.in);
							int n = s.nextInt();
							switch(n){
								case 1:System.out.println(1111);
								case 2:System.out.println(2222);
								case 3:System.out.println(3333);
								default :System.out.println(4444);
							}
	 					}
					}
					

在这里插入图片描述

                    				break 可以跳出switch结构
					package a1;
					import java.util.Scanner;
					public class TextSwitch{
						public static void main(String[] args){
							Scanner s = new Scanner (System.in);
							int n = s.nextInt();
							switch(n){
								case 1:System.out.println(1111);break;
								case 2:System.out.println(2222);break;
								case 3:System.out.println(3333);break;
								default :System.out.println(4444);break;
							}
	 					}
					}
 

在这里插入图片描述

switch case 能表达的一定能用 if else 表达
但能用 if else 表达的不一定能用 switch case 表达

03_不确定循环

  • 程序中的循环
    • 概念:通过某种条件,重复执行一段逻辑死循环:(循环永远跳不出去)
  • while 循环(执行0到n次)
    - 语法:
                    while( 布尔表达式){
                    		//循环逻辑(循环操作)
                     }
  • 执行流程:
    • 先对布尔表达式进行判断,判断结果为 true ,则执行逻辑代码
    • 本次执行完毕后,在此进行判断,结果仍旧为true,则再次执行逻辑代码
    • 纸质布尔表达式的结果为 false 时,才会退出循环结构,执行后续代码
			package day3;
			public class TextLoop {
				public static void main(String[] args) {
					int sum = 0;
					int i = 1;//循环变量
					while(i <= 100) {
						sum += i;
						i++;
					}
					System.out.println(sum);
				}
			}

在这里插入图片描述

  • do while 循环(执行1到n次)
    • 语法:
          			do{
                    		逻辑代码(循环操作)
                    }while(布尔表达式)
  • 执行流程:
    • 先执行一次循环操作后,再进行布尔表达式的判断
    • 如果结果为true,到再次执行循环操作
    • 如果结果为false,才会退出循环结构,执行后续代码
 			package day3;
			public class TextLoop {
				public static void main(String[] args) {
					int sum = 0;
					int i = 1;//循环变量
					 do {
						sum += i;
						i++;
					}while(i <= 100);
					System.out.println(sum);
				}
			}
 

在这里插入图片描述

04_for 循环

  • for 循环(分号前后代码均可以省略,但分号不能省略
    • 语法:
   							for(初始部分;循环条件;迭代部分){
                            	//循环操作
                            }
  • 执行流程:
    • 先对布尔表达式进行判断,结果为true,则执行逻辑代码
    • 本次执行完毕后,再次执行判断,结果仍为true,则再次执行逻辑代码
    • 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码
  			package day3;
			public class TextLoop {
				public static void main(String[] args) {
					int sum = 0;
					int i = 1;//循环变量
					for(i = 1; i<=100; i++) {
						sum += i;
					}
					System.out.println(sum);
				}
			}

在这里插入图片描述

当循环知道多少次一般用 for 循环
当不知道多少循环次数用 while ,do
for循环:确定循环
while,do while :不确定循环

05_break_continue

			package day3;
			public class TextBreakContinue {
				public static void main(String[] args) {
					int i;
					for(i=0; i<5; i++) {
						for(int j = 0; j<4; j++) {
							System.out.print("i="+i+"   j="+j+"\t");
						}
						System.out.println();//换行作用
					}
				}
			}

在这里插入图片描述

  • break 语句
    • 使用 break 语句可以跳出 switch 和 循环语句,从而中断当前循环
      break 跳出最内层的循环
			package day3;
			public class TextBreakContinue {
				public static void main(String[] args) {
					int i;
					for(i=0; i<5; i++) {
						for(int j = 0; j<4; j++) {
                        	if(i==2 && j==3) break;
							System.out.print("i="+i+"   j="+j+"\t");
						}
						System.out.println();//换行作用
					}
				}
			}

在这里插入图片描述
在 Java 中提供了 标签 功能,可以使 break 跳出外层循环

			package day3;
			public class TextBreakContinue {
				public static void main(String[] args) {
					int i;
					loop:for(i=0; i<5; i++) {
						for(int j = 0; j<4; j++) {
							if(i==2 && j==3) break loop;
							System.out.print("i="+i+"   j="+j+"\t");
						}
						System.out.println();
					}
				}
			}

在这里插入图片描述

  • continue语句
    • continue 不是跳出循环体,而是结束本次循环,下面代码不再执行,直接进入下一次循环
   		package day3;
   		public class TextBreakContinue {
   			public static void main(String[] args) {
   				int i;
   				for(i=0; i<5; i++) {
   					for(int j = 0; j<4; j++) {
                       	if(i==2 && j==2) continue;
   						System.out.print("i="+i+"   j="+j+"\t");
   					}
   					System.out.println();//换行作用
   				}
   			}
   		}

在这里插入图片描述

在 Java 中提供了 标签 功能,可以使 continue 跳出外层循环

			package day3;
			public class TextBreakContinue {
				public static void main(String[] args) {
					int i;
					loop:for(i=0; i<5; i++) {
						for(int j = 0; j<4; j++) {
							if(i==2 && j==3) break loop;
							System.out.print("i="+i+"   j="+j+"\t");
						}
						System.out.println();
					}
				}
			}

在这里插入图片描述

06_局部变量

  • 局部变量(在类内部的变量)
    • 概念:声明在函数内部的变量,必须先赋值再使用
    • 作用范围:定义行开始到所在代码块结束
    • 注意:多个变量均为局部变量,在重合的作用范围内,不可出现重名(命名冲突)两个条件同时满足

在这里插入图片描述
解释:当在 if 语句中声明 b 变量后,if 语句执行完后,分配给 b 变量的存储空间会被回收(所以局部变量作用范围从定义那行开始到他所在的代码块结束

在这里插入图片描述
注意:多个变量均为局部变量,在重合的作用范围内,不可出现重名(命名冲突)两个条件同时满足

附加: if (true) int i=10; 错误 没有括号只能执行一句,在 i 变量刚声明就已结束,所以错误(加上代码块就正确了)

07_案例_百钱买百鸡

  • 穷举法:利用计算机计算速度优势,把所有求解可能计算一遍
    • 水仙花数:153=13+53+33

问题:公鸡3元1只,母鸡2元一只,小鸡1元3只,现有100元想买100只鸡,如何买?(把钱花完)

 			package day3;
			public class Exc1 {
				public static void main(String[] args) {
					for(int i = 0 ; i <= 100; i++) {
						for(int j = 0 ; j <= 100; j++) {
							int k = 100 - i - j;
							int money = 3*i + 2*j + k/3;
							if(money == 100) {
								System.out.println("公鸡:"+i+"   母鸡:"+j+"   小鸡:"+k);
							}
						}
					}
				}
			}

在这里插入图片描述
以上结果错误:原因是小鸡的数量必须是3的倍数,(因为1块钱3只)

正确代码:

 			package day3;
			public class Exc1 {
				public static void main(String[] args) {
					for(int i = 0 ; i <= 100; i++) {
						for(int j = 0 ; j <= 100; j++) {
							int k = 100 - i - j;
                            if(k % 3 != 0) continue;
							int money = 3*i + 2*j + k/3;
							if(money == 100) {
								System.out.println("公鸡:"+i+"   母鸡:"+j+"   小鸡:"+k);
							}
						}
					}
				}
			}

在这里插入图片描述

简化代码:
公鸡的数量最多为33只;母鸡的数量最多买50只
然而公鸡买了 i 只时,母鸡最多买 (100 - 3 * i)/2;

 			package day3;
			public class Exc1 {
				public static void main(String[] args) {
					for(int i = 0 ; i <= 33; i++) {
                    	int max = (100 - 3 * i)/2;
						for(int j = 0 ; j <= max; j++) {
							int k = 100 - i - j;
                            if(k % 3 != 0) continue;
							int money = 3*i + 2*j + k/3;
							if(money == 100) {
								System.out.println("公鸡:"+i+"   母鸡:"+j+"   小鸡:"+k);
							}
						}
					}
				}
			}

在这里插入图片描述

08_案例_打印等腰三角形

  • 打印等腰三角形(找规律)
			package day3;
			import java.util.*;
			public class Exc2 {
				public static void main(String[] args) {
					Scanner s = new Scanner(System.in);
					int n = s.nextInt();
					for(int i = 0 ; i<n; i++) {
						for(int j=0; j<n-i ; j++) {
							System.out.print(" ");//打印n-1个空格
						}
						for(int k=0; k<2*i+1; k++) {
							System.out.print("*");//打印2*i+1个*
						}
						System.out.println();//换行
					}
				}
			}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值