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-流程控制:分支判断+循环迭代+异常