4-程序控制结构

概述

在程序中,程序运行的流程控制决定程序是如何执行的,主要有三大流程控制语句:

  • 顺序控制
  • 分支控制
  • 循环控制

顺序控制

概述

程序从上到下逐行地执行,中间没有任何判断和跳转。

Java语言中定义变量时采用合法的前向引用,例如:

public class Test{
    int num1 = 1;
    int num2 = num1 + 1;
}

图示

image-20230118152958616

分支控制

概述

让程序有选择的执行,分支控制有三种:

  • 单分支语句,if
  • 多分支语句,if - else
  • 多分支语句,if - else if - else

单分支

语法

if(条件表达式){
    代码块;
}

Tips:

  • 当条件表达式执行结果为true时,则执行{}里的代码块;当条件表达式执行结果为false时,则不执行;
  • 如果{ }中只有一条语句,则可以不用{ }

流程图

image-20230118174230675

示例

// 导入包
import java.util.*;

public class If01{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("输入您的分数:");
		int score = myScanner.nextInt();
		if(score > 60){
			System.out.println("及格");
		}
	}
}	

image-20230118174132035

双分支

语法

if(条件表达式){
    代码块1}
else{
    代码块2}

Tips:当条件表达式执行结果为true时,执行代码块1;当条件表达式执行结果为false时,执行代码块2;

流程图

image-20230118200609126

示例

需求:18岁以上(包含18岁)显示允许,18岁以下显示未达到合适年龄。

import java.util.Scanner;
public class If02{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请输入您的年龄:");
		int age = myScanner.nextInt();
		if(age >= 18){
			System.out.println("合格!");
		}
		else{
			System.out.println("未达到要求年龄!");
		}
	}
}

image-20230118201457253

多分支

语法

if(条件表达式){
	代码块1;
}
else if{
	代码块2;
}
else{
	代码块n;
}

Tips:

  • 在多分支中可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有
  • 如果有else,如果所有的条件表达式都不成立,则默认执行else中的代码块n

流程图

image-20230118201849847

示例

需求:输入当前的信用分数,分数为100分显示信用极好;分数为80-99[包含80与99]显示信用优秀;分数为60-80[包含60,不包含80]显示信用一般,其他情况显示不及格;

import java.util.Scanner;
public class If03{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请输入您的信用分数:");
		int score = myScanner.nextInt();
		if(score == 100){
			System.out.println("信用极好");
		}
		else if(score > 80 && score <= 99){
			System.out.println("信用优秀");			
		}
		else if(score >= 60 && score < 80){
			System.out.println("信用一般");
		}
		else{
			System.out.println("不及格");
		}
	}
} 

image-20230118204607648

嵌套分支

概述

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外称分支。

语法

if{
    if(){
        
    }
    else{
        
    }
}

示例

比赛规则,如果初赛成绩大于8.0则进入决赛,否则淘汰,进入决赛后会根据选手的性别进入男子组或女子组;

import java.util.Scanner;
public class If04{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请输入选手的最终得分:");
		double score = myScanner.nextDouble();
		if(score > 8.0){
			System.out.print("该选手进入决赛,请输入选手的性别:");
			char gender = myScanner.next().charAt(0);
			if(gender == '男'){
				System.out.println("进入男子组");
			}
			else{
				System.out.println("进入女子组");
			}
		}
		else{
			System.out.println("该选手已被淘汰");
		}

	}
}

image-20230118220354124

switch分支结构

语法

switch(表达式){
    case 常量1:
        代码块1;
        break;
    case 常量2:
        代码块2;
        break;
    case 常量n:
        代码块n;
        break;
    default:
        default代码块;
        break;
        
}

Tips:

  • 如果表达式的值等于常量1,则执行代码块1;
  • 如果表达式的值不等于常量1,则继续向下匹配case 对于的常量值;
  • 如果表达式的值没有匹配上case 对应的常量值,则执行default对应的default代码块;
  • break语句的作用为代码块执行结束之后,跳转switch分支语句;
  • 表达式的返回值必须时byte、short、int、char、enum、String;

流程图

image-20230119110043996

练习

题目:考试得分有四个等级,A - 优秀,B - 良好, C - 及格,D - 未达标,输入其他字符 - 请重新输入

import java.util.Scanner;
public class Switch01{
	public static void main(String[] agrs){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请您输入考核等级:");
		char level = myScanner.next().charAt(0);
		switch(level){
			case 'A':
				System.out.println("优秀");
				break;
			case 'B':
				System.out.println("一般");
				break;
			case 'C':
				System.out.println("及格");
				break;
			case 'D':
				System.out.println("未达标");
				break;
			default:
				System.out.println("未识别,请您重新输入");
				break;
		}
	}
}

image-20230119111057160

return

当return用在方法时,表示跳出方法;当return用在main里面时,表示退出程序;

for循环

代码可以循环执行

语法

for(循环变量初始化;循环条件;循环变量迭代){
    代码块;
}

Tips:

  • for 关键字,表示循环控制;
  • for循环四要素:循环变量初始化,循环条件,循环操作,循环变量迭代;
  • 如果代码块中只有一条语句,可以省略{ };

流程图

image-20230119111835861

输出10行相同语句

public class For01{
	public static void main(String[] args){
		for(int i = 1; i < 11; i++){
			System.out.println("第" + i + "次:"+ "xbxaq.com");
		}
	}
}

image-20230119112356989

打印1~100之间是9倍数的整数,统计个数与总和

public class For02{
	public static void main(String[] args){
		// 个数
		int num = 0;
		// 总和
		int sum = 0;
		for(int i = 1; i < 101; i++){
			if(i % 9 == 0){
				sum += i;
				num += 1;

			}
		}
		System.out.println("100以内的9倍数的个数为" + num);
		System.out.println("100以内的9倍数整数的总和为" + sum);
	}
}

image-20230119113427653

用代码实现以下的语句

0 + 5 = 5
1 + 4 = 5
2 + 3 = 5
3 + 2 = 5
4 + 1 = 5
5 + 0 = 5
public class For03{
	public static void main(String[] args){
		int y = 5;
		for(int i = 0;i <= 5; i++,y--){
			System.out.println(i + " + " + y + " = " + (i + y));
		}
	}
}

image-20230119114241732

while循环

语法

while(循环条件){
    代码块-循环语句;
    循环变量迭代;
}

Tips:while循环先判断再执行语句

流程图

image-20230119114414726

输出10行相同语句

public class While01{
	public static void main(String[] args){
		int i = 1;
		while(i < 11){
			System.out.println("第" + i + "次:" + "xbxaq.com");
			i += 1;
		}
	}
}

image-20230119130533289

打印1-100之间所有能被3整除的数

public class While02{
	public static void main(String[] args){
		int i = 1;
		while(i < 101){
			if(i % 3 == 0){
				System.out.println(i);
			}
			i += 1;
		}
	}
}

image-20230119131143371

do…while循环

语法

do{
	代码块;
	循环变量迭代;
}while(循环条件);

Tips:先执行,再判断(至少执行一次),最后有个分号

流程图

image-20230119132910648

练习

public class DoWhile01{
	public static void main(String[] args){
		int i = 1;
		do{
			System.out.println("小白学安全");
			i += 1;
		}while(i > 5);
		System.out.println("xbxaq.com");
	}
}

image-20230119133308659

多重循环

概述

将一个循环放在另一个循环体内,则形成嵌套循环,其中for、while、do…while都可作为外层循环和内层循环。

多重循环的本质就把内层循环当成外层循环的循环体,只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层循环的当次循环,开始下一次循环。

案例-9*9乘法表

public class Double{
	public static void main(String[] args){
		for(int i = 1; i < 10; i++){
			System.out.println();
			for(int y = 1; y < (i + 1); y++){
				System.out.print(y + "*" + i + "=" + (i * y) + ' ');
			}
		}
	}
}

image-20230119143405468

跳转控制语句

break

break语句用于终止某个语句块的执行,一般使用在switch或循环语句中,跳出循环。

练习

public class Break01{
	public static void main(String[] args){
		for(int i = 1;i < 5; i++){
			if(i == 3){
				System.out.println("666");
				break;
			}
			System.out.println("777");
		}
	}
}

image-20230119144445391

continue

continue语句用于结束本次循环,继续执行下一次循环。

练习

public class Break01{
	public static void main(String[] args){
		for(int i = 1;i < 5; i++){
			if(i == 3){
				System.out.println("666");
				// break;
				continue;
			}
			System.out.println("777");
		}
	}
}

image-20230119144651968

练习

1、某人有100,000元,每经过一次路口,需要交过路费,规则如下:1.当现金>50000时,每次交5%;2.当现金<=50000时,每次交1000;

问:该人可以经过多少次路口?

public class HomeWork01{
	public static void main(String[] args){
		double money = 100000;
		int count = 0;
		while(true){
			if(money > 50000){
				money *= 0.95;
				count ++;
			}
			else if(money >= 1000){
				money -= 1000;
				count++;
			}
			else{
				break;
			}
		}
		System.out.println(count);
	}
}

image-20230130145942460

2、判断输出的整数是否为水仙花数

所谓的水仙花数是指一个三位数,其各个位上的数字立方和等于其本身,例如:153 = 1*1*1 + 5*5*5 +3*3*3

import java.util.Scanner;
public class HomeWork02
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请输入一个整数用于检测是否为水仙花数:");
		int n = myScanner.nextInt();
		int n3 = n / 100;
		int n2 = n % 100 / 10;
		int n1 = n % 10;
		if(n1 * n1 * n1 + n2 * n2 * n2 + n3 * n3 * n3 == n){
			System.out.println(n + "是水仙花数");
		}
		else{
			System.out.println(n + "不是水仙花数");
		}
		
	}
}

image-20230130151826315

3、判断输入的年份是否是闰年

/**
 * 判断输入的年份是否为闰年,需要满足的条件:
 * 1、可以被4整除且不能被100整除;
 * 2、可以被400整除;
 */
import java.util.Scanner;
public class HomeWork03{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请输入年份:");
		int year = myScanner.nextInt();
		if(year % 4 == 0 && year % 100 != 0){
			System.out.println(year + "是闰年");
		}
		else if(year % 400 ==0){
			System.out.println(year + "是闰年");	
		}
		else{
			System.out.println(year + "不是闰年");
		}
	}
}

image-20230130152950680

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值