java小白训练营day04-流程控制:分支+循环+异常

Posted 长安紫薯

tags:

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

程序流程分类

1)顺序执行:从上到下,从左到右(所有的代码都执行)
2)分支判断执行:根据条件进行判断,条件成立执行一段代码,条件不成立执行另外一段代码(部分代码执行,部分代码不执行)
3)循环迭代执行:反复执行一段代码(代码执行多次)

分支

java提供两种语句:if语句(单分支)、switch语句(多分支)
if语句:
1)if(判断条件:布尔表达式){ 。。。}
2)if(){ … } else{ … }
3)elseif if(){ … } elseif(){ … } elseif(){ … } else{ … } 多分支

package test;

import org.junit.Test;

//if语句的测试
public class TestIf {
	// Boolean isRainning = true; 成员变量

	@Test
	public void rainning() {
		// 需求:下雨打伞
		// 如果是成员变量使用包装类型,
		// 如果是局部变量使用基本类型
		boolean isRainning = false;
		if (isRainning) {
			System.out.println("下雨打伞");
		}

		// 简写,只有当if语句后面只有一条语句是,才能省略大括号
		// 不推荐,结构不清晰,号称会出错
		if (isRainning)
			System.out.println("下雨打伞");
		System.out.println("执行完成");

		//开发中最常见写法
		if (isRainning) {
			System.out.println("喜水");
		}else {
			System.out.println("晒被子");
		}
	}
	
	//需求:判断电话号码,输出功能
	@Test
	public void elseIf() {
		int phone = 999;
		if(phone==110) {
			System.out.println("警察");
		}else if(phone==120) {
			System.out.println("医生");
		}else if(phone==119) {
			System.out.println("消防");
		}else {
			System.out.println("非法电话号码");
		}
	}
}





switch 语句:
int n = 10; //整数
switch( n){
case 10:

case 20:

case 30:

default :

}

package test;

import org.junit.Test;

public class TestSwitch {
	@Test
	public void phone() {
		//当switch只要某个条件成立,下面所以的条件不判断,但是代码会执行
		//标准写法,给每个分支最后加语句 break; 跳出
		int phone = 120;
		switch(phone) {
		case 110:	//判断phone==110
			System.out.println("警察");
			break;
		case 120:
			System.out.println("医生");
			break;
		case 119:
			System.out.println("消防");
			break;
		default:
			System.out.println("非法电话号码");
			break; //写不写都行
		}
	}
}

ATM

package test;

//必须选择java.util(工具类)
import java.util.Scanner;

import org.junit.Test;

/*
 * 需求:ATM输入数字操作
 * 1 取钱
 * 2 存钱
 * 3 余额
 * 4 退出 
 */
public class TestATM {
	@Test
	public void atm() {
		//键盘输入数字
		System.out.println("请您输入一个数字:");
		Scanner scan = new Scanner(System.in);
		//自动将输入的内容转换整数类型
		//阻塞,等待用户输入,用户没有输入时就死等
		//回车继续执行下面语句
		int num = scan.nextInt(); 
		
		System.out.println("键盘输入:"+num);
		
		switch(num) {
		case 1:
			System.out.println("取钱");
			break;
		case 2:
			System.out.println("存钱");
			break;
		case 3:
			System.out.println("余额");
			break;
		case 4:
			System.out.println("退出");
			break;
		}
	}
}




循环

1)while 循环
2)do-while 循环
3)do 循环

package test;

import org.junit.Test;

//循环三种方式
public class TestLoop {
	@Test	//while循环
	public void whileLoop() {
		//需求:打印0~9
		int n = 0;
		//当下面的判断成立就执行循环体,如果不成立结束循环
		while(n<10) { 	
			System.out.println(n);
			n++;
		}
	}
	
	@Test //do while循环
	public void doLoop() {
		int n = 0;
		do {
			System.out.println(n);
			n++;
		}while(n<10);
	}
	
	@Test	//for循环
	public void for1() {
		for(
				int i=0;	//第一句,只执行一次
				i<10;		//第二句,判断条件,每次都判断
				i++) {		//第四句,加一
			System.out.println(i); //第三句,打印
		}
	}
	
	@Test	//双重for循环 i,j,k,m,n
	public void for2() {
		//利用*打印方框
		for(int j=0; j<10; j++) { //外层循环
			for(int i=0; i<10; i++) { //内层循环
				System.out.print("*");
			}
			System.out.println(); //换行
		}
	}
	
	@Test //99乘法表
	public void for99() {
		for(int j=1; j<10; j++) {
			for(int i=1; i<j+1; i++) {
				System.out.print(i+"*"+j+"="+i*j+"\\t"); //tab
			}
			System.out.println();
		}
	}
}




死循环

一直循环无法退出

package test;

import org.junit.Test;

//死循环
public class TestDeadLoop {
	@Test
	public void whileDead() {
		while(true) {
			System.out.println("*");
		}
	}
	
	@Test
	public void forDead() {
		for(;;) {
			System.out.println("*");
		}
	}
}

退出循环

1)break 跳出
2)continue 跳过本次循环
3)return 返回

package test;

import org.junit.Test;

//退出循环
public class TestExit {
	@Test
	public void exitLoop() {
		int i = 0;
		while(i<6) {
			i++;
			if(i==3) {
				//break; 	//跳出循环
				//continue; //跳过本次循环
				return;		//方法结束
			}
			System.out.println(i);
		}
		System.out.println("执行完成");
	}
}

package test;

//必须选择java.util(工具类)
import java.util.Scanner;

import org.junit.Test;

/*
 * 需求:ATM输入数字操作
 * 1 取钱
 * 2 存钱
 * 3 余额
 * 4 退出 return 
 */
public class TestATM {
	@Test
	public void atm() {
		//键盘输入数字
		
		Scanner scan = new Scanner(System.in);
		//自动将输入的内容转换整数类型
		//阻塞,等待用户输入,用户没有输入时就死等
		//回车继续执行下面语句
		while(true) {
			System.out.println("请您输入一个数字:");
			int num = scan.nextInt(); 
			
			System.out.println("键盘输入:"+num);
			
			switch(num) {
			case 1:
				System.out.println("取钱");
				break;
			case 2:
				System.out.println("存钱");
				break;
			case 3:
				System.out.println("余额");
				break;
			case 4:
				System.out.println("退出");
				//break;
				return;
			}
		}
	}
}




异常

try试图/catch捕获异常/finally释放资源/
throw抛出异常/throws 接收异常

package test;

import org.junit.Test;

//异常处理,3个经典的错误
public class TestTryCatch {
	@Test
	public void tryCatch() {
		//1. nullPointer异常
		String s = null;
		//System.out.println(s.length());
		
		//2. zero被0除异常 n/0
		//System.out.println(10/0);
		//java.lang.ArithmeticException: / by zero
		
		//3. 数组越界 arr[5]
		int[] arr = new int[5];
		System.out.println(arr[5]);
		//java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5


	}
}

package test;

import java.util.Scanner;

import org.junit.Test;


//异常处理,3个经典的错误
public class TestTryCatch {
	@Test
	public void err() {
		//1. nullPointer异常
		String s = null;
		//System.out.println(s.length());
		
		//2. zero被0除异常 n/0
		//System.out.println(10/0);
		//java.lang.ArithmeticException: / by zero
		
		//3. 数组越界 arr[5]
		int[] arr = new int[5];
		System.out.println(arr[5]);
		//java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
	}
	
	@Test //对于可能出现的错误就需要使用try-catch包裹起来
	public void tryCatch() {
		//如果try中没有出错,不执行catch中内容
		try {
			int[] arr = {1,2,3,4,5};
			System.out.println(arr[6]);
		}catch(Exception e) {	//把出现错误信息存入到e对象实例中
			System.out.println( e.getMessage());
			//错误信息比上面的详细些
			System.out.println( e.toString() );
			
			e.printStackTrace(); //最详细的错误信息,一般没必要
		}
	}
	
	@Test	//finally不管是否出错,都释放资源
	public void tryCatchFinally() {
		//打印键盘输入内容(默认字符串)
		Scanner scan = new Scanner(System.in);
		//Resource leak: 'scan' is never closed 对复杂变量关闭
		
		try {
			int num = scan.nextInt();	//不是整数"a"
			System.out.println(num);
		}catch(Exception ex) {
			System.out.println( ex.toString() );
		}finally {
			//不管正确还是错误,这里的代码都会执行
			System.out.println("执行了我");
			scan.close();	
		}
	}
	
	@Test //自己定义新的异常,并且抛出throw,方法接收异常throws
	public void throwEx() throws Exception{
		try {
			int i = 10/0; //抛出异常
		}catch(Exception e) {
			System.out.println(e.toString());
			//创建自己的异常,可以重新定义异常信息
			throw new Exception("分母不能为0异常。");
		}
	}
}








小结

1)流程控制结构:
a. 顺序结构:从上到下,从左到右
b. 分支判断结构:部分代码执行,部分代码不执行 if/else
c. 循环迭代结构:反复执行一段代码
d. 异常结构:出错就跳过后面代码直接执行catch中的代码,都会执行finally中代码
2)分支(单分支、多分支,分支的条件是互斥的,没有交叉,只会执行其中某一个)
用来判断,它让我们程序有了生命力!程序的业务逻辑。
3)循环(往复执行一件事情)
注意,在循环体内一定要改变判断条件!死循环
while和do区别:while可能一次都不执行,do最少执行一次
for(第一句;第二句;第四句){第三句} 编译器优化
4)异常 Exception
try-catch
try-catch-finally 释放资源 Person p = new Person(); GC垃圾回收器(自动,它不受java开发者控制)
throw-throws,在catch中抛出异常throw产生新的异常,方法后面throws

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

java小白训练营2109-day04-流程控制:分支判断+循环迭代+异常

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

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

java小白训练营2109-day04-知识回顾

Java从小白到入门,Day3(程序流程控制)

java小白训练营day04-知识回顾