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-流程控制:分支判断+循环迭代的主要内容,如果未能解决你的问题,请参考以下文章