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

Posted 长安紫薯

tags:

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

流程控制

什么流程控制,在实际生活中有两种特殊情况
1)顺序执行:从上到下,从左到右,所有的代码都执行!
2)判断执行:下雨收被子,天晴晒被子(要么收被子,要么晒被子,互斥,判断),只做其中一部分代码执行!
3)反复循环:上班(周一到周五上班),代码反复执行,执行到一定时候就结束(有界,不是无限执行)!
必须全部掌握,业务核心的代码就是由判断语句(if、switch)和循环语句(for、while、do)构成!代码的灵魂

分支判断

if语句

1)if 单分支
if(条件判断){ … }
条件成立就执行,条件不成立就不执行,直接跳过
2)if-else 单分支
if(条件判断){ … } else{…}
条件成立就执行,条件不成立就执行else中代码
3)else-if 多分支
if(条件判断){…} else if(条件判断2){ … } else if(条件判断3){ … } [ else{ … } ]

package test;

import org.junit.Test;

//if语句
public class TestIf {
	@Test //if
	public void testIf() {
		//需求:下雨收被子,天晴晒被子
		//判断条件,天气
		boolean isRainning = false;
		
		//部分代码执行,部分代码不执行
		//如果if中只有一条语句,{}是可以省略
		if(isRainning)
			System.out.println("下雨收被子");
			System.out.println("aaa1");
		
		if(isRainning) { //如果多句,{}不能省略
			System.out.println("下雨收被子");
			System.out.println("aaa2");
		}
	}
	
	@Test //需求:下雨收被子,天晴晒被子
	public void testElse() {
		boolean isRainning = true;
		if(isRainning) {
			System.out.println("下雨收被子");
		}else {
			System.out.println("天晴晒被子");
		}
	}
	
	@Test	//需求:电话号码,110警察,120医生,114查号,119火警(互斥)
	public void elseIf() {
		int phone = 999;
		
		//特点:一旦某个条件成立,后面的就都不进行判断,直接结束
		if(phone == 110) {
			System.out.println("警察");
		}else if(phone == 120) {
			System.out.println("医生");
		}else if(phone == 114) {
			System.out.println("查号");
		}else if(phone == 119) {
			System.out.println("火警");
		}else {
			System.out.println("电话号码非法:"+phone); //代码更加完善
		}
	}
}

switch语句(多分支)

它可以和else-if语句互相替代,实现结果一样,语法差异

格式:switch(phone值){ case 110: … case 120: … default … }
break

package test;

import org.junit.Test;

//多分支 switch语句
public class TestSwitch {
	@Test // 需求:电话号码,110警察,120医生,114查号,119火警(互斥)
	public void testSwitch() {
		int phone = 120;

		// 一旦一个条件成立,后面的条件都不进行判断,直接执行(switch穿透)
		switch (phone) {
		case 110: // phone == 110
			System.out.println("警察");
			break; // 结束switch,后面的代码就不会再执行了
		case 120:
			System.out.println("医生");
			break;
		case 114:
			System.out.println("查号");
			break;
		case 119:
			System.out.println("火警");
			break;
		default:
			System.out.println("电话号码非法:" + phone);
			break;// 加不加都行
		}
	}

	// 需求:四季(春3,4,5-夏6,7,8-秋9,10,11-冬12,1,2)
	@Test
	public void season() {
		int month = 12;
		
		switch(month) {
		case 3,4,5: //一次匹配多个值,同样的处理
			System.out.println("春"); break;
			
		case 6:	//利用穿透效果,非常少见
		case 7:
		case 8:
			System.out.println("夏"); break;
			
		case 9,10,11:
			System.out.println("秋"); break;	
			
		case 12,1,2:
			System.out.println("冬"); break;			
		}
	}
}

循环迭代

java提供3种方式

for循环

格式:
for(int i=0; i<10; i++){ …循环体 }
注意事项:
int i=0; 声明了一个变量i,j,k,m,n,设置一个初始化值
i<10; 这是一个判断条件,如果条件为真true,执行for循环体
循环体
循环体执行完成回到 i++,它的作用非常大,改变判断条件的作用,最终结束for循环,继续判断,条件成立就继续执行循环体,条件不成立,则结束循环。

执行的顺序:
代码写的顺序和真正执行的顺序不同!
1)int i=0; 执行一次
2)i<10; 判断条件,满足就执行,不满足就结束
3)循环体中代码
4)i++

package test;

import org.junit.Test;

//for循环
public class TestFor {
	@Test //需求:在控制台输出0~9
	public void forLoop() {
		//ln = line 换行
		
		//也可以写成i<=9,更习惯i<10写法
		for(int i=0; i<9; i++) {
			System.out.println(i);
		}
	}
	
	@Test //需求:打印一个矩形
	public void forBox() {
		//双层for循环,外层for循环,内层for循环,嵌套两层
		for(int j=1; j<10; j++) {		//行数
			for(int i=1; i<10; i++) { 	//列数,算术运算符的优先级高于比较运算符
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	@Test //需求:打印一个三角形
	public void forTra() {
		//双层for循环,外层for循环,内层for循环,嵌套两层
		for(int j=1; j<10; j++) {		//行数
			for(int i=1; i<j+1; i++) { 	//列数,算术运算符的优先级高于比较运算符
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	@Test	//需求:九九乘法表
	public void for9() {
		for(int j=1; j<10; j++) {
			for(int i=1; i<j+1; i++) {
				System.out.print(i+"*"+j+"="+i*j+"\\t"); //TAB键,斜杠转义字符,不在是字面t而是tab键
			}
			System.out.println();
		}
	}
}

while、do-while循环

格式:
int i = 0;
while(i<10){
。。。
i++;
}

package test;

import org.junit.Test;

//循环 while
public class TestWhile {
	@Test
	public void whileLoop() {
		int i = 0;	//初始化变量i,初始值0
		while(i<10) {	//判断成立就执行while循环体,不成立结束while循环
			System.out.println(i);
			i++; 	//改变判断条件
		}
	}
	
	@Test	//do循环是特殊while循环
	public void doLoop() {
		int i = 0; 
		do {	//直接执行循环体
			System.out.println(i);
			i++;	//改变判断条件
		}while(i<10);	//进行判断,条件成立执行循环体,条件不成立结束
	}
}

三种循环的区别?

1)形式不同
2)for循环变量在循环结构中,while和do-while在循环结构之外
3)for定义的i智能在循环体内有效,循环结束后i就不能再使用;while和do都是在外部定义的,循环结束后,可以继续使用,其值也被改变了
4)while最少执行一次,do可能一次都不执行
5)死循环

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

中途退出循环

三种方式
1)break 跳出循环
2)continue 跳过本次循环
3)return 返回方法

package test;

import org.junit.Test;

//退出循环的三种方式
public class TestExitLoop {
	@Test
	public void exit() {
		int i = 0;
		while(i<6) {
			i++;
			if(i==3) {
				//break;  //跳出循环,直接结束循环
				//continue; //跳过本次循环,会继续循环
				return;
			}
			System.out.println(i);
		}
		System.out.println("循环结束");
	}
}

案例ATM

package test;

import java.util.Scanner;

/*
 * ATM 
 * 输入1:查询
 * 输入2:取款
 * 输入3:存款
 * 输入4:退出
 * 
 * 注意:
 * 1)键盘输入值:java.util.Scanner对象,scan.nextInt()得到键盘输入数字
 * 2)根据输入数字,做不同的处理(switch)
 * 2)反复输入,只到用户输入4,程序结束(死循环 if+break/return)
 */
public class TestATM {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in); //监控键盘
		while(true) {
			//获得输入值呢?
			System.out.println("请输入一个数字,只能是1~4:");
			
			//nextInt()会阻塞,暂停程序,等待用户输入,不输入就一直等,
			//等用户输入值回车后,程序才会继续执行
			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("退出");
				return;  //结束程序
			}
		} //end while
	}
}




猜数字

package test;

import java.util.Random;
import java.util.Scanner;

//需求:猜大小,输入值判断其大小,看猜几次能猜中
public class TestGuess {
	public static void main(String[] args) {
		//1、得到一个随机数1~10 Random 随机数
		Random random = new Random();
		
		//参数10,[0,10) 包括0不包括10,
		int r = random.nextInt(10) +1;	//[1,11)=1~10
		//System.out.println("随机数:"+r);
		
		//2、输入一个值,Scanner 键盘 System.in
		Scanner scan = new Scanner(System.in);
		
		while(true) {
			System.out.println("请输入:");
			int n = scan.nextInt();
			
			//3、判断和产生随机数是大还是小,else-if
			if(n>r) {
				System.out.println("大了");
			}else if(n<r) {
				System.out.println("小了");
			}else {
				System.out.println("太聪明了,猜对了");
				//4、猜中结束 while+return
				return;
			}
		}
	}
}

小结

1)程序3种流程执行方式
a. 顺序执行:从上到下,从做到右
b. 分支判断:部分代码执行部分代码不执行
c. 循环迭代:反复执行一段代码
2)分支,if语句,switch语句
3)循环 for,while,do

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

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

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

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

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

202105小白训练营-day05 异常+String

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