Day05-选择结构分支结构与循环结构

Day05-选择结构分支结构与循环结构

程序的流程结构

  1. 顺序结构:从上往下,逐行执行
  2. 选择结构:条件满足,某些代码才会执行
  3. 循环结构:条件满足,某些代码会反复多次执行,直到条件不满足

选择结构

基本if选择结构

语法

if(布尔表达式){
    //执行代码块
}

执行流程

  • 对布尔表达式进行判断。
  • 结果为true,则先执行代码块,再执行后续代码。
  • 结果为false,则跳过代码块,直接执行后续代码。

举几个例子

//1、导包
import java.util.Scanner;
public class TestIf1{
    public static void main(String[] args){
        //如果java成绩大于90,奖励一个键盘
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        System.out.println("请输入您的java成绩");
        //3、用input接收double类型的值 nextDouble();
        double score = input.nextDouble();
        //4、判断
        if(score > 90){
          System.out.println("奖励一个键盘");  
        }
        System.out.println("程序结束");
    }
}
//1、导包
import java.util.Scanner;
public class TestIf2{
    public static void main(String[] args){
        /*java成绩大于98分,而且html成绩大于80分,老师奖励他;或者java成绩等于100分,Html成绩大于70分,老师也可以奖励他。*/
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收成绩
         System.out.println("请输入您的java成绩");
        double javaScore = input.nextDouble();
        System.out.println("请输入您的html成绩");
        double htmlScore = input.nextDouble();
        //4、判断
        if((javaScore > 98 && htmlScore > 80) || (javaScore == 100 && htmlScore > 70)){
          System.out.println("奖励一个键盘");  
        }
        System.out.println("程序结束");  
    }
}

if else选择结构

语法

if(布尔表达式){
    //执行代码块1
}else{
    //执行代码块2
}

执行流程

  • 对布尔表达式进行判断。
  • 结果为true,则先执行代码块1,再退出整个结构,执行后续代码。
  • 结果为false,则先执行代码块2,再退出整个结构,执行后续代码。

举几个例子

//1、导包
import java.util.Scanner;
public class TestIfElse1{
    public static void main(String[] args){
    /*
        如果体彩中了500万,我买车、买房、欧洲旅游,否则继续买
        要求控制台输入是否中奖
        字符串比较使用equals()方法
        技术点if-else
        值的比较
        基本数据类型
        等值判断 1 == 1 '是' == '是'
        引用数据类型
        等值判断(地址值)
        字符串内容比较 equals()
        */
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收数据
        System.out.println("请输入是否中奖");
        /*
        char answer = input.next().charAt(0);
        //4、判断
        if('是' == answer){
            System.out.println("买车、买房、欧洲旅游");
        }else{
            System.out.println("继续买");
        }
        */
        String answer = input.next();
        if ("是".equals(answer)) {
            System.out.println("买车、买房、欧洲旅游");
        } else {
            System.out.println("继续买");
        }
        System.out.println("程序结束");
    }
}
//1、导包
import java.util.Scanner;
public class TestIfElse2{
    public static void main(String[] args){
        /*
		 输入四位数字的会员号
		 百位数字等于产生的随机数字即为幸运会员
		 提示恭喜您中奖了,否则没中奖
		 */
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收输入四位数字的会员号
        int cardNo = input.nextInt();
        //百位数字等于产生的随机数字即为幸运会员
        int ge = cardNo % 10;
        int shi = cardNo / 10 % 10;
        int bai = cardNo /100 % 10;
        int qian = cardNo /1000 % 10;
        System.out.println("千位是"+qian+"百位是"+bai+"十位是"+shi+"个位是"+ge);
        int random = (int)(Math.random()*10);
        System.out.println("产生的随机数字为:"+random);
        if(bai == random){
            System.out.println("恭喜您中奖了");
        }else{
            System.out.println("没中奖");
        }
}

多重if选择结构

语法

if(布尔表达式1){
//执行代码块1
}else if(布尔表达式2){
//执行代码块2
}else if(布尔表达式3){
//执行代码块3
}else{
//执行代码块4
}

执行流程

适用于区间,但要保证条件顺序

  • 表达式1为true,则执行代码块1,再退出整个结构。
  • 表达式2为true,则执行代码块2,再退出整个结构。
  • 表达式3为true,则执行代码块3,再退出整个结构。
  • 以上均为false,则执行代码块4,再退出整个结构。

举几个例子

//1、导包
import java.util.Scanner;
public class TestMultIf1{
	public static void main(String[] args){
		/*
		某游戏对不同等级的积分的玩家赋予不同的荣誉称号,其对应关系如下:
		积分>=10000分为钻石玩家
		积分>=5000并且<10000为白金玩家
		积分>=1000并且<5000为青铜玩家
		积分<1000为普通玩家。
		小编现在是有7200分,请在代码编辑器中完善代码,看一下小编是什么级别的玩家。
		*/
        //2、创建Scanner
        Scanner input=new Scanner(System.in);
        //3、接收数据
        System.out.println("请输入小编的积分数:");
        int score=input.nextInt();
        //4、处理数据
		/*
		if(score>=10000){
			System.out.println("钻石玩家");
		}

		if(score>=5000&&score<10000){//相当于5000<=score<10000
			System.out.println("白金玩家");
		}
		*/
        if(score>=10000){
            System.out.println("钻石玩家");
        }else if(score>=5000){//相当于在5000-10000之间,即5000<=score<10000
            System.out.println("白金玩家");
        }else if(score>=1000){
            System.out.println("青铜玩家");
        }else if(score<1000){
            System.out.println("普通玩家");
        }
        System.out.println("程序结束");
	}
}

嵌套if选择结构

语法

if(外层表达式){
if(内层表达式){
//内层代码块1
}else{
//内层代码块2
}
}else{
//外层代码块
}

执行流程

当外层条件满⾜时,再判断内层条件。

举几个例子

//1、导包
import java.util.Scanner;
public class TestNestIf{
	public static void main(String [] args){
		/*
       判断用户输入的性别,如果是女生,
       然后再输入年龄,如果年龄大于18则输出“女士你好,”,
       否则输出“小姐姐你好”,
       如果是男生,直接输出“帅哥你好”。
       String比较内容是否相同使用.equals()
		*/
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收数据
        System.out.println("请输入您的性别:");
        String sex = input.next();
        //4、处理数据
        if ("女".equals(sex)) {
            System.out.println("请输入您的年龄");
            int age = input.nextInt();
            if (age > 18) {
                System.out.println("女士你好");
            } else {
                System.out.println("小姐姐你好");
            }
        } else if ("男".equals(sex)) {
            System.out.println("帅哥你好");
        } else {
            System.out.println("请慎重输入您的性别!!!");
        }
        System.out.println("程序结束");
	}
}

注意

  • if和else后面只有一条语句时,可以省略后面的{},但不建议这么写
  • if else可以理解为如果...否则...
  • else 总是与其前面最近的尚未配对的if结合

分支结构

switch case 语句

switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法

switch(变量 | 表达式){
case 值1:
逻辑代码1;
break;
case 值2:
逻辑代码2;
break;
case 值n:
逻辑代码n;
break;
default:
未满⾜时的逻辑代码;
break;
}

执行流程

switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断

注意事项

1、可判断的类型: byte、short、int、char、String(JDK7+)

2、case穿透:

​ 产生这种现象的原因:由于某个case语句中缺少或者漏写break语句所导致的结果

3、switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号

4、case 语句中的值的数据类型必须与变量的数据类型相同,case后面只能跟常量,不能跟变量

5、switch语句遇见break结束,或者程序默认执行到末尾结束

6、default可以在switch语句的任何位置,但建议在最后一个,default在末尾的时候它里面的break可以省略

举个例子

public class TestSwitch{
    public static void main(String[] args){
        /*
        根据不同输入名次显示不同奖励
        第一名:奖励 iphone
        第二名:奖励 小米电视
        第三名:奖励 自行车
        否则:奖励 彩票
        */
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收数据
        System.out.println("请输入名次:");
        int num = input.nextInt();
        //4、处理数据
        switch(num){
            case 1:
                System.out.println("奖励iphone");
                break;
            case 2:
                System.out.println("奖励小米电视");
                break;
            case 3:
                System.out.println("奖励自行车");
                break;
            default:
                System.out.println("奖励iphone");
                break;//尽量加上break;若不加,放case1前,这句永远执行
        }
        System.out.println("程序结束");
    }
}

if else也算是一种分支结构

循环结构

通过某个条件,重复的执行⼀段逻辑代码。

一个循环简单的由以下部分组成

初始条件:循环用以开始的数据

循环条件:决定循环是否继续的依据

循环操作:单次循环的逻辑代码或任务(一次循环要做的事情)

迭代部分:控制循环条件改变增量

while循环

语法

while(布尔表达式,循环的条件){
//逻辑代码(循环要做的事情)
}

执行流程

先对布尔表达式进行判断,结果为true,则执行逻辑代码。
本次执行完毕后,再次进行判断,结果仍旧为true,则再次执行逻辑代码。
直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。

特点

首次循环有条件,先判断,再执行。

举几个例子

public class TestWhile1{
    public static void main(String[] args){
        int i = 1;//1、初始条件
        while(i <= 10){//2、条件判断
            System.out.println("HelloJava");//3、循环操作
            i++;//4、迭代部分
        }
        System.out.println(i);//执行了10次,最后++,i=11不满足条件,退出循环
        System.out.println("程序结束");
    }
}
/*
需求:计算1+2+...+99+100的总和
解决方案:
1、直接打印 System.out.println(1+2+...);
2、公式 1+100+2+99+...
3、循环
4、声明1个变量i,声明1个变量sum
5、声明100个变量,声明1个变量sum
*/
public class TestWhile2{
	public static void main(String[] args){
        /*
        int i = 1;
        int sum = 0;
        sum += i;
        i++;
        sum += i;
        i++;
        sum += i;
        i++;
        sum += i;
        i++;
        */
        int i = 1;//1、初始条件
        int sum = 0;//2、暂时给sum一个值0
        while(i <= 100){//3、循环操作
            sum += i;
            i++;//4、迭代部分
        }
        System.out.println(sum);
    }
}
public class TestWhile3{
    public static void main(String[] args){
        //计算1~100之间,所有偶数的和
        /*
        int i = 0;
        int sum = 0;
        while(i <= 100){
            if(1 % 2 == 0){//判断偶数
                sum += i;
            }
            i++;
        }
        System.out.println("和是"+sum);
        System.out.println("程序结束");
        */
        int i = 0;
        int sum = 0;
        while(i <= 100){
            sum += i;
            i += 2;
        }
        System.out.println("和是:"+sum);
        System.out.println("程序结束");
    }
}

do-while循环

语法

do{
逻辑代码(循环操作)
}while(布尔表达式);

特点

首次循环没有条件,先执行,再判断。

举几个例子

public class TestDoWhile1{
	public static void main(String[] args){
     //需求:打印100遍HelloJava
     //1、初始部分
     int i = 1;
     //先执行,再判断。
     do{
         //3、循环操作
         System.out.println(i+"HelloJava");
         //4、迭代部分
         i++;
     }while(i <= 100);
     System.out.println(i);
     System.out.println("程序结束");
 	}
}
//1、导包
import java.util.Scanner;
public class TestDoWhile2{
    public static void main(String[] args){
        /*
        需求:检查作业完成情况,
        根据输入的教师评语
        决定学生是否抄写
        */
        //2、创建Scannner
        Scanner input = new Scanner(System.in);
        char answer;//声明
        do{
            //检查作业完成情况
            System.out.println("抄写一遍。");//会先执行循环体中的语句,再去判断
            System.out.println("根据抄写情况输入较使评语:(y/n)");
            //3、接值
            answer = input.next().charAt(0);
        }while(answer != 'y');
        System.out.println("程序结束");
    }
}

for循环

语法

for(初始部分 ; 循环条件 ; 迭代部分){
//循环操作
}

特点

适用于循环次数明确的情况

举几个例子

public class TestFor1{
	public static void main(String[] args){
        /*
        需求:打印100遍HelloJava
        */
        /*
        int i = 1;
        while(i <= 100){
            System.out.println(i+"HelloJava");
            i++;
        }
        System.out.println("程序结束");
        */
        for(int i = 1;i <= 100;i++){
            System.out.println(i+"HelloJava");
        }
        System.out.println("程序结束");
    }
}
//1、导包
import java.util.Scanner;
public class TestFor2{
    public static void main(String[] args){
        //控制台输入整数n,计算n的阶乘(!n)。例:1*2*...*n
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收数据
        System.out.println("请输入一个整数:");
        int n = input.nextInt();
        //4、计算n的阶乘(!n)
        /*整数的默认值是int,最大取值范围是2147483647
        如果计算13的阶乘超越其取值范围,值不准确了*/
        long sum = 1;
        for(int i = 1;i <= n;i++){
            sum *= i;
        }
        System.out.println(n+"的阶乘是:"+sum);
        System.out.println("程序结束");
    }
}
//1、导包
import java.util.Scanner;
public class TestFor3{
    public static void main(String[] args){
        /*
        现有1个班级的5名同学,请通过控制台输入5名同学的分数,并计算平均分
        */
        //2、创建Scanner
        Scanner input = new Scanner(System.in);
        //3、接收数据
        double sum = 0;
        /*
        System.out.println("请输入第1名同学的成绩:");
        double score = input.nextDouble();
        sum += score;
        System.out.println("请输入第2名同学的成绩:");
        double score = input.nextDouble();
        sum += score;
        System.out.println("请输入第3名同学的成绩:");
        double score = input.nextDouble();
        sum += score;
        */
        for(int i = 1;i <= 5;i++){
            System.out.println("请输入第"+i+"名同学的成绩:");
            double score = input.nextDouble();
            sum += score;
        }
        //4、求平均分
        double avg = sum / 5;
        System.out.println("平均分是:"+avg+"分");
    }
}

for循环特殊形式

特殊形式1:省略循环条件,出现死循环。
特殊形式2:省略迭代部分,出现死循环。
特殊形式3:初始化、循环条件、迭代部分都省略,出现死循环。

增强型for循环

语法
for(声明语句 : 表达式)
{
   //循环操作
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

举个例子
public class TestFor4 {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30, 40, 50};
        for (int num : numbers) {
            System.out.print(num);
            System.out.print(",");
        }
    }
}

输出结果为:10,20,30,40,50,

嵌套循环

在一个完整的循环结构中,嵌套另一个完整的循环结构。常见二重循环。考察逻辑,开发用的少

/*
打印3行5颗*
*****
*****
*****
*/
public class TestNested1{
    public static void main(String[] args){
        /*
        System.out.print("*");
		System.out.print("*");
		System.out.print("*");
		System.out.print("*");
		System.out.print("*");
        */
        /*
		for(int j=1;j<=5;j++){
			System.out.print("*");
		}
		System.out.println();//换行
		for(int j=1;j<=5;j++){
			System.out.print("*");
		}
		System.out.println();//换行
		for(int j=1;j<=5;j++){
			System.out.print("*");
		}
		System.out.println();//换行
		*/
        for(int i = 1;i <= 3;i++){//控制行数
            for(int j = 1;j <= 5;j++){//控制*的数量
                System.out.print("*");
            }
            System.out.println();//打印完后换行
        }
    }
}
public class TestNested2{
    public static void main(String[] args){
        /*
        需求:计算三个班,每个班5名同学的平均成绩
        */
        Scanner input = new Scanner(System.in);
        for(int i = 1;i <= 3;i++){
            double sum = 0;
            for(int j = 1;j <= 5;j++){
                System.out.println("请输入第"+j+"名学员的成绩:");
				double score=input.nextDouble();
				sum+=score;
            }
            double avg=sum/5;
            System.out.println("第"+i+"个班的,5名学员平均分是:"+avg+"分。");
        }
    }
}
 /*
 打印直角三角形
 *
 **
 ***
 ****
 ******
 i行数,j星星个数
 i=1  星星个数=1
 i=2  星星个数=2
 i=3...
 */
public class TestNested3{
    public static void main(String[] args){
		for(int i=1;i<=5;i++){//控制行的打印
			for(int j=1;j<=i;j++){//控制*打印
				System.out.print("*");
			}
			System.out.println();//换行
		}
    }
}
public class TestNested4{
	public static void main(String [] args){
		/*
		 九九乘法表
		*/
		//i代表行,j代表列
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				//列*行,因为是从内层开始循环,j从1开始
				System.out.print(j+"*"+i+"="+(i*j)+"\t");
			}
			System.out.println();//换行
		}
		
	}
}
/*
打印等腰三角形
*
***
*****
*******
*********

i代表行数,j代表星星个数
i    j
1    1
2    3
3    5
4    7
5    9

用#填充,就变为了等腰三角形
####*
###***
##*****
#*******
*********
*/
public class TestNested5 {
	public static void main(String[] args) {
		int rows = 5;
        //外层循环控制行数
        for (int i = 1; i <= rows; i++) {
            //1.先打印填充
            //打印空格(倒三角)这里用空格填充
            for (int j = rows - 1; j >= i; j--) {//4 3 2 1  4>=2
                System.out.print(" ");
            }
            //2.再打印*
            //这里内层循环控制星星个数
            for (int j = 1; j <= 2 * i - 1; j++) {//1 3 5 7 9
                System.out.print("*");
            }
            //换行,每结束完内层循环打印一行后进行换行
            System.out.println();
        }
	}
}

流程控制语句

break

public class TestBreak1{
    public static void main(String[] args){
        /*
        break的基本用法
        break:终止、跳出switch、循环结构
        */
        for(int i = 1;i <= 10;i++){
            if(i == 5){
                break;
            }
            
        }
    }
}
public class TestBreak2{
    public static void main(String[] args){
        /*
        现有1个班级的5名同学,请通过控制台输入5名同学的分数,
        并计算平均分,如果录入分数为负值,提示用户结束
        */
        Scanner input = new Scanner(System.in);
        //boolean flag = true;//引入布尔值,判断
        double sum = 0;
        int i =1;//全局变量
        for(;i < 5;i++){
            System.out.println("请输入第"+i+"名学员的成绩");
            double score = input.nextDouble();
            if(score < 0){
                System.out.println("成绩不能为负值");
                //flag = flalse//小于0,将其置为负
                break;
            }
            sum += score;
        }
        /*
        if(flag){
            souble avg = sum / 5;
            System.out.println("平均分是:"+avg+"分。")
        }
        */
        if(i == 6){//输入5名同学后,打印平均分
            double avg = sum / 5;
            System.out.println("平均分是:"+avg+"分。");
        }
    }
}

continue

public class TestContinue1{
    public static void main(String[] args){
        /*
        continue的基本用法
        continue:结束本次循环、执行下一次循环
        */
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue;
            }
            System.out.println("当前值:" + i);
        }
        System.out.println("程序结束");
    }
}
import java.util.Scanner;
public class TestContinue2{
    public static void main(String[] args){
        /*
        现有1个班级的5名同学,请通过控制台输入5名同学的分数,并计算平均分
        统计80分以上分数学员所占比例
        */
        Scanner input = new Scanner(System.in);
        int total = 0;
        for(int i = 1;i <= 5;i++){
            System.out.println("请输入第"+i+"名学员的成绩:");
            double score = input.nextDouble();
            if(score < 80){
                continue;
            }
            total++;//计数
        }
        double rate = (double)total / 5;//double类型自动转换
        System.out.println("统计80分以上分数数学员所占比例"+rate*100+"%");
    }
}

总结

break有中断,打断的意思;continue有继续的意思

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue 适用于任何循环控制结构中。作用是结束当前循环,开始下一次循环
posted @ 2021-07-16 21:38  CN_Darren  阅读(62)  评论(0)    收藏  举报