第04章 程序控制结构

news2025/1/16 3:01:53

在程序中,程序运行的流程控制决定程序是如何执行的。

顺序控制

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

使用:java中定义变量时,采用合法的前向引用。如:

public class Test{
	int num1 = 12;
	int num2 = num1 + 2;
	System.out.println(num2);

	// 错误写法
	int num2 = num1 + 2;     // 找不到num1变量
	int num1 = 12;
}      

分支控制(if, else,switch)

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

1)单分支

if (条件表达式){
  执行代码块;(可以有多条语句)
}

当条件表达式为true时,就会执行{}的代码。如果为false时,就不执行。

特别注意:如果{}中只有一条语句时,可以不用{},建议写上{}。

// if 的快速入门
import java.util.Scanner;
public class if01{
	public static void main(String[] args) {
		// 输入人的年龄,大于18,则输出:成年人。
		// 思路分析:
		// 1、接收输入的年龄
		// 2、把年龄保存到变量
		// 3、使用if判断
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入年龄:");
		int age = myScanner.nextInt();
		if (age > 18){
			System.out.println("年龄大于18岁,是成年人了");	
		}
		System.out.println("程序继续执行");
	}
}

在这里插入图片描述

2)双分支

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

当条件表达式成立时,及执行代码块1,否则执行代码块2。如果执行的代码块只有一条语句,则{}可以省略,不推荐使用。

// if 的快速入门
import java.util.Scanner;
public class if01{
	public static void main(String[] args) {
		// 输入人的年龄,大于18,则输出:成年人。
		// 思路分析:
		// 1、接收输入的年龄
		// 2、把年龄保存到变量
		// 3、使用if,else判断
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入年龄:");
		int age = myScanner.nextInt();
		if (age > 18){
			System.out.println("年龄大于18岁,是成年人了");	
		} else { // 双分支
			System.out.println("年龄小于18岁,未成年");
		}
		System.out.println("程序继续执行");
	}
}

在这里插入图片描述

测试题

public class IfExercise01{
	public static void main(String[] args) {
		// 声明两个double类型的变量并赋值
		// 判断当第一个数大于10.0,且第二个数小于20.0时,打印两数之和。
		double num1 = 13;
		double num2 = 12;
		if (num1 >10 && num2 < 20){
			System.out.println("输出结果" + (num1 + num2));
		}
	}
}
public class IfExercise01{
	public static void main(String[] args) {
		// 声明两个int类型的变量并赋值,判断两者之和是否能被3又能被5整除,打印提示信息。
		int num1 = 12;
		int num2 = 18;
		int sum = num1 + num2;
		if (sum % 3 ==0 && sum % 5==0){
			System.out.println("两数之和可以整除3和5");
		}
	}
}

3)多分支

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

在这里插入图片描述

特别说明:

  • 多分支,可以没有else。
// if 的快速入门
import java.util.Scanner;
public class if01{
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入信用分:");
		// 如果输入的是一个字符串该怎么办呢,这里使用异常处理进行解决。
		int score = myScanner.nextInt();
		if (score <= 100 && score >0){
			if (score ==100){
				System.out.println("信用极好");
			} else if (80<score && score <=99) {
				System.out.println("信用优秀!!!");
			} else if (60 <= score && score <= 80) {
				System.out.println("信用一般");
			} else {
				System.out.println("信用不及格");
			}
		} else {
			System.out.println("信用分需要在1-100之间,请重新输入");
		}
	}
}

switch分支结构

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

1、witch关键字,表示switch分支

2、表达式对应一个值,可以是返回的值

3、case 常量1; 当表达式的值等于常量1时,就执行语句块1

4、break: 表示退出switch

5、如果和case常量1匹配就执行语句块1,如果不匹配则继续匹配case 常量2

6、如果一个都没有匹配上,则执行default。
在这里插入图片描述

switch注意事项和细节讨论

1、表达式中的数据类型,应该和case中的常量类型一致,或者是可以自动转成可以相互比较的类型。

2、switch中的表达式返回值必须是:byte、short、int、char、enum、String 注意没有double

通过1和2两个规则,决定了在case中byte、short、int、char为一类【自动提升为int类型】,string自己一类,enum之后再说。

3、case 中的值必须是常量,不能是变量。

4、default子句是可选的,也可以不写,当不写时,如果前面的case都不匹配时,则输出为空。

5、break语句用来在执行完case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾。

练习题

在这里插入图片描述
在这里插入图片描述

int num = 12;
switch (num){
	case 3:
	case 4:
	case 5:
		System.out.println("春季");
		System.out.println("春季");
		break;
	case 6:
	case 7:
	case 8:
		System.out.println("夏季");
		System.out.println("夏季");
		break;
	case 9:
	case 10:
	case 11:
		System.out.println("秋季");
		System.out.println("秋季");
		break;
	case 12:
	case 1:
	case 2:
		System.out.println("冬季");
		System.out.println("冬季");
		break;
}

注意:switch中的default和break的作用范围。

0118_韩顺平Java_switch课堂练习1_哔哩哔哩_bilibili

switch和if的比较

1、如果判断的具体数值不多,而且符合 byte、short、int、char、enum、String这6种类型。虽然两个语句都可以使用,建议使用switch语句

2、其他情况,对区间的判断,对结果为bioolean类型判断,使用if,if的使用范围更广。

循环控制(for、while、dowhile、多重循环)

基本语法

for (循环变量初始化; 循环条件; 循环变量迭代){
    循环体(可以多条语句);
}

在这里插入图片描述

注意事项

1、循环条件返回的是一个布尔值的表达式

2、for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略

public class for01{
	public static void main(String[] args) {
		int i = 1;
	    for (; i <=10;) {
	    	System.out.println("您好" + i);
	    	i++;
	    }
        System.out.println(i);
	}
}		

3、循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开。循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

public class for01{
	public static void main(String[] args) {
	    for (int i=0, j = 0; i <=10; i++, j+=2) {
	    	System.out.println("i=" + i+ "; j=" + j);
	    }
	}
}		

编程思想:1、化繁为简2、先死后活

While循环

基本结构

while (循环条件){
    循环体(语句);
    循环变量迭代;
}
// 循环结构四要素:循环变量初始化、循环条件、循环体、循环变量迭代

public class while01{
	public static void main(String[] args) {
	    int count = 1;
	    while (count <= 10){
	    	System.out.println("niaho" + count);
	    	count++;
	    }
	}
}		

在这里插入图片描述

注意事项和细节说明

1、循环条件是返回一个布尔值的表达式

2、while循环同for循环,是先判断再执行语句。

do while循环控制

基本语法

循环变量初始化;
do{
    循环体(语句);
    循环变量迭代;
}while(循环条件);

说明

1、循环四要素,只是位置不同

2、先执行,再判断,也就是说,最少执行一次

3、最后的while有个分号 ;

4、while 和do while 的区别:要账

在这里插入图片描述

注意事项和细节说明

1、循环条件是返回一个布尔值的表达式

2、do while循环是先执行,再判断,因此至少执行一次。

public class dowhile01{
	public static void main(String[] args){
		int i =1;
		int count = 0;
		do{
			if ((i % 5 == 0) && (i %3!=0)){
				count++;
			}
			i++;
		}while(i <=200);
		System.out.println("个数为:" + count);
	}
}

多重循环

1、循环最多不要超过三层,会造成可读性比较差。

测试题

for (int i=1;i<=9;i++){
  for (int z = 1; z<=i; z++){
    System.out.print(i + "*" + z + "=" + i*z + "\t");
  };
  System.out.println();

}
public class stars{
	public static void main(String[] args){
		int totalLevel = 100;

		for (int level=1; level <= totalLevel; level++){
			// 打印每行的空格
			for (int space=1; space <= totalLevel-level; space++){
				System.out.print(" ");
			}

			// 打印每行的 * 
			for (int star=1; star <= 2 * level -1; star++){
				if (star==1 || star==2 * level -1 || level==totalLevel){
					System.out.print("*");
				} else {
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}

break

基本介绍

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

注意事项和细节说明

1、break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。

2、标签的基本使用

public class break01{
	public static void main(String[] args){
		label01:
		for (int j =0; j < 4; j++){
		label02:
			for (int i=0; i<10; i++) {
				if (i==2){
					break label01;
				}
				System.out.println("i=" + i);
			}
		}
	}
}

continue

基本介绍

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

2、continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和break中的标签使用规则一样。

public class Continue01{
	public static void main(String[] args){
		label01:
		for (int j =0; j < 4; j++){
		label02:
			for (int i=0; i<10; i++) {
				if (i==2){
					continue label01;
				}
				System.out.println("i=" + i);
			}
		}
	}
}

return

简介

return使用在方法中,表示跳出所在的方法。

注意:**如果在main方法中使用return。**则会退出程序,这是和break的区别。

public class Return01{
	public static void main(String[] args){
		getMethod();
		System.out.println("sss");
	}

	public static void getMethod(){
        for (int i =1; i<3;i++){
			if (i==2){
				return;
			}
			System.out.println("i="+i);
		}
    }
}

测试题

1、输出1-100之间不能被5整除的数,每5个一行。

public class Work{
	public static void main(String[] args){
		int count =0;
		for(int num=1; num<=100; num++){
			if (num % 5 != 0){
				System.out.print(num + "\t");
				count++;

				if (count % 5 == 0){
					System.out.println();
				}
			}
		}
	}
}

2、输出小写字母a-z

for (char a = 'a'; a<='z'; a++){ //关键对char的使用
    System.out.print(a+"\t");
}

3、求出1-1/2 + 1/3 -1/4 + 1/5 -1/6 + … + 1/97 - 1/98 + 1/99 - 1/100 的和

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【虚幻引擎】UE4/UE5像素流在广域网上(云)部署(多实例)

一、选择云服务器 每个云平台都提供许多预设的镜像选择&#xff0c;由于像素流技术目前只支持Windows操作系统&#xff0c;所以我们需要选择Windows Server的镜像&#xff0c;2012/2016/2019皆可。我们这里选择了Windows Server 2016 R2 简体中文版的镜像&#xff0c;之所以选择…

【SSM整合】对Spring、SpringMVC、MyBatis的整合,以及Bootstrap的使用,简单的新闻管理系统

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;【Spring】 &#x1f96d;本文内…

代码随想录第53天|● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

1143.最长公共子序列 和718.最长重复子数组类似 包括二维数组初始化这些 不同之处在于递推公式主要就是两大情况&#xff1a; text1[i - 1] 与 text2[j - 1]相同&#xff0c;text1[i - 1] 与 text2[j - 1]不相同 如果text1[i - 1] 与 text2[j - 1]相同&#xff0c;那么找到了…

Windows/Linux日志分析

Windows日志分析 Windows系统日志是记录系统中硬件、软件和系统问题的信息&#xff0c;同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因&#xff0c;或者寻找受到攻击时攻击者留下的痕迹。 Windows主要有以下三类日志记录系统事件&#xff1a;应用程序日志…

【链表】leetcode707.设计链表(C/C++/Java/Js)

leetcode707.设计链表1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.3.1 单链表3.3.2 双链表3.4 JavaScript版本4 总结1 题目 题源链接 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性&#xff1a;val 和 next。val 是当前节点的值&…

2022年地图产业研究报告

第一章 行业概况 地图是按照一定法则&#xff0c;有选择地以二维或多维形式与手段在平面或球面上表示地球&#xff08;或其它星球&#xff09;若干现象的图形或图像&#xff0c;它具有严格的数学基础、符号系统、文字注记&#xff0c;并能用地图概括原则&#xff0c;科学地反映…

canvasjs javascript-charts 3.7.3 Crack

canvasjs javascript-charts/ 3.7.3 具有 30 多种图表类型的 JavaScript 图表库 具有 10 倍性能和 30 多种图表类型的 JavaScript 图表和图形库。核心 JavaScript 图表库是独立的&#xff0c;但也带有流行框架的组件&#xff0c;如 React、Angular、Vue 等。图表响应迅速&#…

14、RH850 F1 RAM存储器介绍

前言: RAM——程序运行中数据的随机存取&#xff08;掉电后数据消失&#xff09;整个程序中&#xff0c;所用到的需要被改写的量&#xff0c;都存储在RAM中&#xff0c;“被改变的量”包括全局变量、局部变量、堆栈段&#xff0c;此专栏会有针对SPI的工作原理的详细介绍。 一、…

性能优化系列之如何选择合适的WebView内核?

文章の目录一、iOS UIWebView1、优点2、不足二、iOS WKWebView1、优势2、不足三、Android WebKit 和 Chromium四、Android 第三方1、X5 内核五、选型建议写在最后一、iOS UIWebView 1、优点 从 iOS 2 开始就作为 App 内展示 Web 内容的容器排版布局能力强 2、不足 内存泄露…

将两个对象以指定方法按指定轴对齐的DataFrame.align()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】将两个对象以指定方法按指定轴对齐DataFrame.align()选择题关于以下python代码说法错误的一项是?import pandas as pddf1 pd.DataFrame({"A": [1,2],"B":[3,4]})df2 pd.…

MySQL延时关联使查询速度提升N倍

以下内容也可以观看视频教程&#xff1a; https://space.bilibili.com/431152063先来看下面的sql语句&#xff1a; select * from orderinfo limit 1000000, 100目前orderinfo表中的数据大概是1亿行 查询耗时大概2秒多&#xff0c;如果将sql中的返回所有字段改成只返回dbid字段…

Linux驱动开发基础__APP怎么读取按键值

目录 1 妈妈怎么知道孩子醒了 2 APP读取按键的4种方法 2.1 查询方式 2.2 休眠-环形方式 2.3 poll方式 2.4 异步通知方式 在做单片机开发时&#xff0c;要读取 GPIO 按键&#xff0c;我们通常是执行一个循环&#xff0c;不断地 检测 GPIO 引脚电平有没有发生变化。但是在 Li…

进入保护模式

文章目录前言前置知识代码说明实验操作前言 本博客记录《操作系统真象还原》第四章实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;实现从MBR到LOADER&#xff0c;由LOADER实现进入保护模式 实验原理&#xff1a;计算机…

Cadence PCB仿真分配电压网络电压时网络未自动识别问题解决方案

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,问题概述2,分配方法3,避免方法4,总结1,问题概述 如下图所示在使用Allegro PCB SI为电源网络分配电压时,有些网络实际上是电源网络,但是未被自动识别,无法对齐分配电压,具体解决方法如下。 2,分配方法 第1…

最近新开源的基于单目稠密重建NeRF-SLAM

点云PCL免费知识星球&#xff0c;点云论文速读。文章&#xff1a;NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields作者&#xff1a;Antoni Rosinol John J. Leonard Luca Carlone编辑&#xff1a;点云PCL代码&#xff1a;https://github.com/ToniRV/N…

JavaScript 异步函数解析

前言 在学习 JavaScript 的过程中&#xff0c;理解并灵活运用异步相关知识是一件不容易的事情&#xff0c;这体现在代码可读性、健壮性上&#xff0c;好在 ES6 出现后挽回了这一局面&#xff0c;我们不再需要编写可读性不高的回调嵌套&#xff0c;也不用为了代码的健壮性而处处…

spring boot使用TaskScheduler实现动态增删启停定时任务

TaskScheduler 概述 TaskScheduler是spring 3.0版本后&#xff0c;自带了一个定时任务工具&#xff0c;不用配置文件&#xff0c;可以动态改变执行状态。也可以使用cron表达式设置定时任务。 被执行的类要实现Runnable接口 TaskScheduler是一个接口&#xff0c;它定义了6个…

具有梯度流的一类系统的扩散图卡尔曼滤波(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

FEW-SHOT TEXT CLASSIFICATION WITH DISTRIBUTIONAL SIGNATURES

摘要 在这篇文章中&#xff0c;我们利用元学习进行文本分类&#xff0c;元学习在计算机视觉中有相当好的效果&#xff0c;在这里&#xff0c;低层次的模式可以跨学习任务迁移的&#xff0c;&#xff0c;然而&#xff0c;直接将这个方法应用到文本中是具有挑战性的&#xff0c;…

【自学C++】C++输入cin

C输入cin C输入cin教程 在 C 语言 中我们需要捕获用户的键盘输入&#xff0c;可以使用 scanf 函数。scanf 函数在输入时&#xff0c;我们必须要指定输入的数据类型对应的格式化符&#xff0c;挺不方便。 在 C 中&#xff0c;我们要捕捉用户的输入&#xff0c;直接使用 std 命…