202106小白训练营day04-java程序结构分支循环异常

Posted 长安紫薯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了202106小白训练营day04-java程序结构分支循环异常相关的知识,希望对你有一定的参考价值。

程序结构

程序

代码code,
早期程序定义 = 数据结构+算法(关注java语言自身特性)
新的程序定义 = 数据结构+算法+框架(SSM)+架构(nginx+redis+mycat+docker…)
学习培优课程的重点,框架+架构

程序结构

1)顺序结构:从上到下,从左到右,所有的代码都执行
2)分支结构(判断):部分的代码执行,部分的代码不执行(三目),
a. 单分支 if、else
b. 多分支 else-if、switch-case-default-break
3)循环结构:反复执行一段代码
a. for
b. while
c. do-while
4)异常结构:假如有一段代码可能发生异常,如果异常就抛出异常,如果不异常就正确执行
a. try{}
b. catch{}
c. finally{}
d. throw
e. throws

分支 if、swtich

if判断,支持类型:byte、short、int、long、char、String

if、if-else、else-if

package cn.tedu.flow;

import org.junit.Test;

//if分支判断语言
public class TestIf {
	@Test
	public void testIf() {
		// 奇偶数判断
		int n = 10;
		if (n % 2 == 1) { // 条件,括号内结果是布尔值
			System.out.println("奇数");
		} else {
			System.out.println("偶数");
		}

		// if后面没有括号只执行紧跟着的一句,有括号多条语句
		boolean isRainning = false;
		if (isRainning) 
			System.out.println("打伞");
		
		if (isRainning) {
			System.out.println("打伞");
			System.out.println("穿雨鞋");
		}
	}

	@Test // 判断电话110,114,119,120
	public void elseIf() {
		int phone = 136;
		if (phone == 110) {
			System.out.println("警察");
		} else if (phone == 114) {
			System.out.println("查号");
		} else if (phone == 119) {
			System.out.println("火警");
		} else if (phone == 120) {
			System.out.println("医院");
		} else {
			System.out.println("电话号码错误");
		}
	}
}

package cn.tedu.flow;

import org.junit.Test;

//多分支,语法结构和else-if,实现同样功能
public class TestSwitch {
	@Test //switch一旦有一个条件成立,后面的条件都不判断
	public void phone() {
		//判断电话:110,114,119,120
		char phone = 110;
		//switch不支持long
		//Cannot switch on a value of type long. Only convertible int values,
		//strings or enum 枚举 variables are permitted
		switch(phone) {
		case 110:	//判断条件phone==110
			System.out.println("警察");
			break;	//跳出switch
		case 114:
			System.out.println("查号");
			break;
		case 119:
			System.out.println("火警");
			break;
		case 120:
			System.out.println("医院");
			break;
		default :
			System.out.println("电话号码错误");
			break;  //加不加都可以
		}
	}
}

分支特点,每个分支互斥,一旦选择一个分支,其他分支不会执行

循环,反复执行

for/while/do-while

for循环,99乘法表

package cn.tedu.flow;

import org.junit.Test;

//三种循环
public class TestLoop {
	//for循环中一条代码中3个部分,3条语句
	@Test
	public void forLoop() {
		//格式:for(第一句-初始化; 第二句-判断; 第四句-改变变量的值){ 第三句 }
		//判断条件,成立true,执行for循环体内代码,不成立false,结束for循环
		for(int i=0; i<10; i++) { //for循环体
			System.out.print(i);
		}
	}
	
	//局部变量跟随方法,方法结束,这个变量就被java干掉
	@Test //双重循环,嵌套循环
	public void for2Loop() {
		//代码块中定义变量,当代码块结束,它就被java干掉
//		for(int i=1; i<10; i++) {
//			System.out.print(i);
//		}
//		System.out.println();
//		for(int i=1; i<10; i++) {
//			System.out.print(i);
//		}
		
		//第一层循环,外循环
		for(int i=1; i<10; i++) {
			//第二层循环,内循环,换名:jkmn
			//i控制每次输出几个,从i计算会多一个,i+1控制起始值1
			for(int j=1; j<i+1; j++) {
				System.out.print(i+"*"+j+"="+i*j+" ");
			}
			System.out.println();
		}
		
	}
	
}

while和do循环

	@Test
	public void whileLoop() {
		// for(int i=1; i<10; i++){ ... }
		int i = 1;
		while (i < 10) {
			System.out.println(i);
			i++;
		}
	}

	@Test // while先判断,do后判断
	public void doLoop() {
		int i = 1;
		do {
			System.out.println(i);
			i++;
		} while (i < 10);
	}

死循环

package cn.tedu.flow;

import org.junit.Test;

//Java提供两种经典死循环的写法
public class TestDeadLoop {
	@Test
	public void forDeadLoop() {
		for(;;) {
			System.out.println("for死循环");
		}
	}
	
	@Test
	public void whileDeadLoop() {
		while(true) {
			System.out.println("while死循环");
		}
	}
}

退出循环的三种方式

package cn.tedu.flow;

import org.junit.Test;

//退出循环,3种方式:
/*
 * break跳出,在循环体内执行break语句,就直接结束while循环
 * continue跳过,跳过continue后的代码,直接去while判断
 * return返回
 */
public class TestExitLoop {
	@Test
	public void exit() {
		int i = 0;
		while (i < 6) {
			i++;
			if (i == 3) {
				// break;
				// continue;
				return;
			}
			System.out.println(i);
		}
		// return; //结束了方法 Unreachable code
		System.out.println("执行完成");
	}
}

ATM案例

package cn.tedu.flow;

import java.util.Scanner;

import org.junit.Test;

/*
 * 业务需求:
 * 输入1:查询
 * 输入2:取款
 * 输入3:存款
 * 输入4:退出(退出程序)
 */
public class ATM {
	@Test
	public void atm() {
		// 人工输入:等待键盘输入api,Scanner,阻塞,程序不会继续执行,等人从键盘输入后回车
		// Scanner对象,先创建实例,new
		// 键盘:System.in 输入设备

		Scanner scan = new Scanner(System.in);
		// 怎么获取键盘输入内容,通过.操作符获取对应值
		// scan.nextLine() 它得到结果是一个一行数据,字符串类型
		// scan.nextInt(); //把键盘输入字符串转换成整型

		while (true) {
			System.out.println("请输入你的指令:");
			int num = scan.nextInt(); // 回车后才能得到

			// 死循环
			switch (num) {
			case 1:
				System.out.println("查询");
				break;
			case 2:
				System.out.println("取款");
				break;
			case 3:
				System.out.println("存款");
				break;
			case 4:
				return;
			}
		}
	}
}

完善ATM

package cn.tedu.flow;

import java.util.Scanner;

import org.junit.Test;

/*
 * 业务需求:
 * 输入1:查询
 * 输入2:取款
 * 输入3:存款
 * 输入4:退出(退出程序)
 */
public class ATM {
	@Test
	public void atm() {
		// 人工输入:等待键盘输入api,Scanner,阻塞,程序不会继续执行,等人从键盘输入后回车
		// Scanner对象,先创建实例,new
		// 键盘:System.in 输入设备

		Scanner scan = new Scanner(System.in);
		// 怎么获取键盘输入内容,通过.操作符获取对应值
		// scan.nextLine() 它得到结果是一个一行数据,字符串类型
		// scan.nextInt(); //把键盘输入字符串转换成整型

		while (true) {
			try {
				System.out.println("请输入你的指令:");
				int num = scan.nextInt(); // 回车后才能得到
	
				// 死循环
				switch (num) {
				case 1:
					System.out.println("查询");
					break;
				case 2:
					System.out.println("取款");
					break;
				case 3:
					System.out.println("存款");
					break;
				case 4:
					return;
				}
			}catch(Exception e) {
				//e.printStackTrace(); //在控制台打印详细错误信息
				System.out.println("您输入的内容非法,请输入1~4!");
				//再次获取一次行,输入和回车本质有两行,把回车消灭
				scan.nextLine(); //不需要它的返回值,不需要赋值,只操作
			}
		}
	}
}

小结

1)程序
a. 旧的程序:数据结构+算法
b. 新的程序:数据结构+算法+框架+架构
2)程序结构:3种
a. 顺序结构:从上到下,从左到右,全都执行
b. 分支判断结构,要么要么,有部分代码不执行
c. 循环结构,重复执行,注意跳出条件
d. 异常结构,处理异常,部分代码执行,部分代码不执行(正确try中和finally中内容,catch中的不执行;错误try中出错前的代码执行,出错后的代码不执行,跳过,finally中执行。finally死活都执行。释放复杂资源)
3)分支
a. 单分支 if语句,if-else语句
if(判断){},当if体中代码一行时,大括号可以省略。不推荐
b. 多分支 else-if语句、switch,switch比较死板,else-if都能实现很灵活
if-else-if-else
switch-case(break)-default
所有代码中最重要的,体现业务逻辑,代码灵魂,就是if语句!
4)循环
a.* for 自增i++,i–
b.* while,赋值初始化语句
c. do-while,很少用,有业务场景
5)错误
a. Error 错误,系统级别,不能访问操作系统级别错误,只能眼睁睁报错
b. Exception 异常,开发者可以处理
6)异常
a. try 试图,尝试。有可能代码出现逻辑异常,就需要使用try包裹,不一定出错
b. catch 捕获,try中代码出错,会自动跳转到catch中,
c. finally 最终,释放资源。代码正常,代码异常,死活都执行
d. throw 抛出异常,throw new Exception(“重新定义错误信息”);
e. throws 接收异常,放在方法后面 throws Exception

以上是关于202106小白训练营day04-java程序结构分支循环异常的主要内容,如果未能解决你的问题,请参考以下文章

202106小白训练营day05-java API

202106小白训练营day01-java第一个案例HelloWorld

202106小白训练营day02-java基础语法

202105小白训练营-day04 流程控制

java小白训练营2109-day03-数据结构:基本类型+包装类型+数组+对象

java小白训练营day03-数据结构:jUnit+基本类型+包装类型+数组+对象