JAVA学习笔记 03 - JAVA语言程序结构
本文是Java基础课程的第三课。计算机语言的程序结构无外乎顺序结构、分支结构、循环结构,本文主要介绍Java语言中这些程序结构是如何实现的
文章目录
- 一、程序结构
- 二、分支结构
- 1、单分支if语句
- 2、双分支if...else语句
- 3、嵌套的if...else语句
- 4、多分支if...else if...else语句
- 5、switch语句
- 6、综合案例
- 三、循环结构
- 1、while循环语句
- 2、do-while循环语句
- 3、for循环语句
- 4、break语句
- 5、continue语句
- 6、多重循环
- 7、综合案例
一、程序结构
程序的基本结构包括顺序结构、分支结构和循环结构。顺序结构按照语句的书写次序顺序执行。选择结构根据条件是否满足来选择执行对应的程序段,Java语言提供了if
和switch
语句用来开发分支结构的程序。循环结构在给定条件下重复执行一些程序段,Java语言提供了while
、do-while
、for
语句实现循环结构。
二、分支结构
程序中有些程序段的执行是有条件的,当条件成立时,执行一些程序段,当条件不成立时执行另一些程序段或者不执行,这种结构称为分支结构,也叫选择结构。
1、单分支if语句
单一的if
语句是最常用的单分支结构,使用一个布尔表达式进行条件判断。如果布尔表达式的值为true
,表示条件满足,则执行if
语句后面紧跟的{}
中的代码块。
单分支if
语句的语法格式如下:
if (布尔表达式) {// 如果布尔表达式为true将执行的语句
}
下面是一个示例:
public class Test {public static void main(String[] args) {int num1 = 10;if (num1 < 20) {System.out.println("这是 if 语句块中的代码");}}
}
说明:
- 由于表达式
num1 < 20
返回true
,所以if
语句块中的代码会被执行。
2、双分支if…else语句
双分支if…else语句,使用一个布尔表达式进行条件判断。如果布尔表达式的值为true
,表示条件满足,则执行if
语句后面紧跟的{}
中的代码块,如果布尔表达式的值为false
,表示条件不满足,则执行else
后面紧跟的{}
中的代码块。
双分支if...else
语句的语法格式如下:
if (布尔表达式) {// 如果布尔表达式为true将执行的语句
} else {// 如果布尔表达式为false将执行的语句
}
下面是一个示例:
public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);int likuiScore, yanqingScore;System.out.println("请输入新兵李逵的得分:");likuiScore = input.nextInt();System.out.println("请输入新兵燕青的得分:");yanqingScore = input.nextInt();if (likuiScore > yanqingScore) {System.out.println("新兵李逵被选为新兵标兵");} else {System.out.println("新兵燕青被选为新兵标兵");}}
}
说明:
- 如果表达式
likui_score > yanqing_score
返回true
,则执行System.out.println("新兵李逵被选为新兵标兵")
,否则执行System.out.println("新兵燕青被选为新兵标兵")
。
条件运算符(三元运算符)也可以实现双分支结构。观察下面的两段代码:
示例代码1:
public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);int class1Score, class2Score, maxScore;System.out.println("请输入一班的比赛成绩:");class1Score = input.nextInt();System.out.println("请输入二班的比赛成绩:");class2Score = input.nextInt();if (class1Score > class2Score) {maxScore = class1Score;} else {maxScore = class2Score;}System.out.println("优胜班的成绩是:" + maxScore);}
}
示例代码2:
public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);int class1Score, class2Score, maxScore;System.out.println("请输入一班的比赛成绩:");class1Score = input.nextInt();System.out.println("请输入二班的比赛成绩:");class2Score = input.nextInt();maxScore = (class1Score > class2Score) ? class1Score : class2Score; // 使用 三元运算符 实现双分支结构System.out.println("优胜班的成绩是:" + maxScore);}
}
说明:
- 上面的两段代码实现的功能一致,可以看出,当双分支结构中判断条件(布尔表达式)与要执行的语句都比较简单时,使用条件运算符(三元运算符)代码会更加简练优雅。
3、嵌套的if…else语句
if
语句后面紧跟的{}
中的代码块中和else
后面紧跟的{}
中的代码块中,都可以继续嵌套if...else
语句,用以完成更复杂的分支结构。
下面是一个示例:
public class Test {public static void main(String[] args) {/*判断闰年的逻辑:整百的年份可以被400整除,为闰年,否则不是;其他年份被4整除为闰年,否则不是*/Scanner scanner = new Scanner(System.in);System.out.println("请输入年份:");int year = scanner.nextInt();if (year % 100 == 0) {if (year % 400 == 0) {System.out.println(year + " 是闰年");} else {System.out.println(year + " 不是闰年");}} else {if (year % 4 == 0) {System.out.println(year + " 是闰年");} else {System.out.println(year + " 不是闰年");}}}
}
4、多分支if…else if…else语句
当判断条件比较多时,可以使用多分支if...else if...else
语句。
多分支if...else if...else
语句的语法格式如下:
if (布尔表达式1) {// 如果布尔表达式1为true将执行的语句
} else if (布尔表达式2) {// 如果布尔表达式2为true将执行的语句
} else if (布尔表达式3) {// 如果布尔表达式3为true将执行的语句
} [else {// 以上分支都没有进入时将执行的语句
}]
下面是一个示例:
public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入成绩:");int score = scanner.nextInt();if (score >= 90) {System.out.println("成绩为:A");} else if (score >= 80) {System.out.println("成绩为:B");} else if (score >= 70) {System.out.println("成绩为:C");} else if (score >= 60) {System.out.println("成绩为:D");} else {System.out.println("成绩为:E");}}
}
说明:
- 在多分支
if...else if...else
语句中,当某一个作为判断条件的布尔表达式返回true
时,即进入对应分支,之后其他分支中的布尔表达式不再进行运算,分支中的语句也不会被执行。 - 在多分支
if...else if...else
语句中,else if
语句可以出现多次,最后的else
语句是可选项。
5、switch语句
对于Java中的多分支结构,除了使用多分支if...else if...else
语句外,还可以使用switch
语句,switch
语句能够根据给定的表达式的值,从多个分支中选择一个分支来执行。相当于if...else if...else
语句,switch
语句可读性更强。
switch
语句的语法格式如下:
switch (表达式) {case 常量1:语句1;Break;case 常量2:语句2;Break;[...][default:语句n;]
}
下面是一个示例:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入成绩:");int score = scanner.nextInt();int result = score / 10;switch (result) {case 9:System.out.println("成绩为:A");break;case 8:System.out.println("成绩为:B");break;case 7:System.out.println("成绩为:C");break;case 6:System.out.println("成绩为:D");break;default:System.out.println("成绩为:E");}}
说明:
- 表达式返回结果的数据类型可以是
byte
、char
、short
、int
、enum
、String
。 case
语句可以出现多次。break
语句和default
语句是可选项。switch
语句首先计算表达式的值,如果表达式的值和某个case
语句后面的常量值相等,就执行该case
对应的语句块,直到遇到break
语句为止,没有遇到break
语句的话,会继续执行后续的case
语句对应的语句块,直到遇到break
语句为止。如果没有一个常量值与表达式的值相等,则执行default
语句对应的语句块。如果没有default
语句,switch
语句不执行任何操作。
6、综合案例
下面是一个综合应用的案例:
public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入年份:");int year = scanner.nextInt();System.out.println("请输入月份:");int month = scanner.nextInt();switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:System.out.println(year + "年" + month + "月有" + 31 + "天");break;case 4:case 6:case 9:case 11:System.out.println(year + "年" + month + "月有" + 30 + "天");break;case 2:if(year % 400 == 0){System.out.println(year + "年" + month + "月有" + 29 + "天");}else if (year % 4 == 0 && year % 100 != 0){System.out.println(year + "年" + month + "月有" + 29 + "天");}else {System.out.println(year + "年" + month + "月有" + 28 + "天");}break;default:System.out.println("输入的月份有误");}}
}
说明:
- 本例中,嵌套使用了
switch
语句和if...else if...else
语句,用以判断用户输入的某一具体年月有多少天。
三、循环结构
有些程序段需要在某些条件下重复执行多次,称为循环结构程序。Java提供了3种循环语句实现循环结构,包括while
循环语句、do-while
循环语句、for
循环语句。它们的共同点是根据给定条件来判断是否继续执行指定的程序段。如果满足执行条件,就继续执行循环体,否则就不再执行循环体,结束循环结构,继续执行后面的语句。
1、while循环语句
while
循环首先使用一个布尔表达式进行条件判断,如果布尔表达式的值为true
,表示条件满足,则执行while
语句后紧跟的{}
中的代码块,这段代码即循环体,循环体执行完之后,再计算布尔表达式进行条件判断,如果布尔表达式的值仍然为true
,便再次执行循环体,形成循环;当布尔表达式的值为false
时,直接执行循环体之后的代码。
while
循环语句的语法格式如下:
while (布尔表达式) {// 循环体;
}
下面是一个示例:
public class Test {public static void main(String[] args) {// 使用while循环,计算1+2+3+…+100的和,并显示结果int num = 1;int sum = 0;while (num <= 100) {sum += num;num ++;}System.out.println("sum = " + sum);}
}
说明:
- 程序中定义
int
类型的变量num
,初始化为1
,定义int
类型变量sum
,用于存储累加的和。在while
循环条件中,当num
的值小于等于100
时,进入循环体,在循环体内部先将num
的值累加到变量sum
中,再将变量num
自增。循环体执行结束后再次回到while
的循环条件中,如果num
的值小于等于100
则再次进入循环体,否则结束循环。最后输出累加的和。 while
循环的特点是先判断,再执行。
2、do-while循环语句
do-while
循环的原理与while
循环基本相同,不同的是,do-while
循环先执行一遍循环体中的代码块,再计算布尔表达式进行条件判断,如果布尔表达式的值仍然为true
,便再次执行循环体,形成循环;当布尔表达式的值为false
时,直接执行循环体之后的代码。
do-while
循环语句的语法格式如下:
do {// 循环体;
} while (布尔表达式);
下面是一个示例:
public class Test {public static void main(String[] args) {// 使用do-while循环,计算1+2+3+…+100的和,并显示结果int num = 1;int sum = 0;do {sum += num;num ++;} while (num <= 100);System.out.println("sum = " + sum);}
}
说明:
- 上面的例子中,当程序进入
do-while
循环时,首先进入循环体,在循环体内部先将num
的值累加到变量sum
中,再将变量num
自增。然后判断num
是否小于等于100
,如果判断条件的值为true
,程序就会再次进入循环体,否则退出循环。最后输出累加的和。 do-while
循环的特点是先执行,再判断。
下面是另一个示例:
public class Test {public static void main(String[] args) {// 使用do-while循环计算1-50之间的奇数和与偶数和,并显示结果int num = 1;int evenSum = 0; // 存放偶数的和int oddSum = 0; // 存放奇数的和do {if (num % 2 == 0) {evenSum += num;} else {oddSum += num;}num++;} while (num <= 50);System.out.println("even sum = " + evenSum);System.out.println("odd sum = " + oddSum);}
}
说明:
- 本例中配合使用
do-while
语句和if...else
语句,计算1-50之间的奇数和与偶数和。
3、for循环语句
for
循环语句是程序中使用最多的循环结构。for
循环语句使用三个表达式,分别用来初始化循环变量,判断循环执行条件,以及改变循环变量。
for
循环语句的语法格式如下:
for (表达式1; 表达式2; 表达式3) {// 循环体;
}
下面是一个示例:
public class Test {public static void main(String[] args) {// 使用for循环,计算1+2+3+…+100的和,并显示结果int sum = 0;for (int i = 0; i <= 100; i++) {sum += i;}System.out.println("sum = " + sum);}
}
说明:
- 定义
int
类型变量sum
,用于存储累加的和。当程序进入for
循环时,首先执行表达式1,为循环变量i
初始化为1
,然后执行表达式2,判断i <= 100
是否为true
,如果为true
进入循环体,将i
的值累加到变量sum
中,再执行表达式3,将循环变量的值i
加1
,再执行表达式2,判断i <= 100
是否成立,如果成立再进入循环体,形成循环,否则结束for
循环。最后输出累加的和。 for
循环通常用在已知循环次数的情况下。
下面是另一个示例:
public class Test {public static void main(String[] args) {Random random = new Random();String password = "";for (int i = 0; i < 5; i++) {int r = random.nextInt(26);r += 97;password = password + (char) r;}System.out.println("生成的密码是:" + password);}
}
说明:
- 本例利用Java提供的随机数生成方法,配合一个循环5次的
for
循环语句,生成5位长度的随机密码。 - Java中有两个具有生成随机数的方法的类,分别是
java.lang.Math
和java.util.Random
。类java.lang.Math
中random()
方法可以生成大于等于0.0
小于1.0
的double
类型的随机数;类java.util.Random
中提供了一些列的方法可以生成指定范围的随机数,如nextInt()
、nextDouble()
等。 - 本例中代码
random.nextInt(26)
的作用是生成一个大于等于0
,小于26
之间的一个随机整数。 - 本例中
r += 97
后r
的值是区间[97, 122]
内的整数,这个区间的整数与ASCII中的小写字母恰好对应。而(char) r
将一个整数转换成对应的字符。
4、break语句
Java中提供了break
语句,可用于switch
语句或while
、do-while
、for
循环语句,如果程序执行到break
语句,立即从switch
语句或循环语句退出。
下面是一个示例:
public class Test {public static void main(String[] args) {/*使用while循环计算1+2+3+…,当和超过100时,结束循环,输出一共相加了多少个数*/int sum = 0;int index = 1;while (true) {sum += index;if (sum > 100) {break;}index++;}System.out.println("index = " + index);}
}
说明:
- 定义
int
类型变量sum
,初始化为0
,用于存储累加的和,定义int
类型变量index
,初始化为1
,用于控制循环次数。 while (true)
表示循环条件永远成立。if (sum > 100)
表示终止条件成立,执行break
语句,即跳出循环体,执行while
循环后面语句。
5、continue语句
continue
语句可用于for
、do-while
、while
语句的循环体中,如果程序执行到continue
语句,则结束本次循环,回到循环条件处,判断是否执行下一次循环。
下面是一个示例:
public class Test {public static void main(String[] args) {// 使用for循环计算1+2+3+…100的和,但要去除7的倍数int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 7 == 0) {continue;}sum += i;}System.out.println("1+2+3+...+100去除7的倍数的和是" + sum);}
}
说明:
- 定义
int
类型变量sum
,初始化为0
,用于存储累加的和。 for
循环中定义int
类型变量i
,初始化为1
,用于控制循环次数。- 当
i <= 100
时进入循环体。 - 当
i % 7 == 0
的值为true
时,表示i
的值是7的倍数,执行continue
语句,即结束本次循环,进入下一次循环。
6、多重循环
如果循环语句的循环体中又包含循环语句,就形成了多重循环结构,称为循环嵌套。被包含的循环称为内循环,包含的循环称为外循环。常用的循环嵌套是二重嵌套和三重嵌套,更多重的=嵌套由于代码逻辑复杂,应当尽量避免使用。循环嵌套既可以是一种循环自身的嵌套,也可以是不同循环语句相互嵌套。
下面是一个示例:
public class Test {public static void main(String[] args) {// 使用双重for循环输出乘法口诀表for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + "x" + i + "=" + (j * i) + "\t");}System.out.println();}}
}
说明:
- 外循环的循环变量
i
初始化为1
,i <= 9
,共循环9次,System.out.println()
可使得外循环每循环一次换一行。 - 内循环的循环变量
j
初始化为1
,j <= i
,故第i
行会产生i
列。
7、综合案例
下面是一个综合应用的案例:
public class Test {public static void main(String[] args) {// 接收键盘输入的数字,使用for循环输出对应行数的等腰三角形Scanner input = new Scanner(System.in);System.out.println("请输入行数:");int row = input.nextInt();if (row < 2) {System.out.println("请输入大于2的整数");} else if (row > 99) {System.out.println("行数太大了");} else {for (int i = 1; i <= row; i++) {for (int j = row; j >= i; j--) {System.out.print(" ");}for (int k = 1; k <= 2 * i - 1; k++) {System.out.print("*");}System.out.println();}}}
}
说明:
int
类型的变量row
用来存储键盘输入的行数。- 外循环的循环变量
i
初始化为1
,i <= row
,用来控制行数。外层循环中的System.out.println()
用来控制换行。 - 对于第一个内循环,循环变量
j
初始化为row
代表的行数值,当外循环的循环变量i
自增时,由于j >= i
,故内循环的循环次数减少,以此来控制每行前面输出的空格数量。 - 对于第个二内循环,循环变量
k
初始化为1
,当外循环的循环变量i
的自增时,由于k <= 2 * i - 1
,故内存循环次数以1、3、5、7、…的顺序递增,依次来控制每行输出的*
数量。
JAVA学习笔记 03 - JAVA语言程序结构相关推荐
- Java学习笔记1:Java中有关print、println、printf的用法和区别
Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...
- Java学习笔记(java基础)
Java学习笔记(第一周) Java 介绍 Java 发展方向 JVM , JDK , JRE 名词解释 Java语言的特点 Java安装 安装包的下载 配置环境变量 验证是否安装成功 Java的第一 ...
- Java学习笔记2.4.3 选择结构 - 多分支结构
文章目录 零.本讲学习目标 一.多分支结构概述 (一)并列式多分支结构 (二)嵌套式多分支结构 (三)延拓式多分支结构 (四)开关式多分支结构 二.案例演示 方法一.采用并列式多分支结构评定成绩等级 ...
- Java 学习笔记(4)——java 常见类
上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法.其实Java相比于C来说强大的另一个原因是Java中提供 ...
- java学习笔记(一) ----java下常用的包功能
***java下常用的包*** java.lang----包含一些java语言的核心类,如String,Math,Integer,System,Thread,提供常用的功能. java.awt---- ...
- Java学习笔记-7.Java IO流
一.输入/输出流 1.流:不同类型的输入.输出源 数据流:输入或输出的数据 Java数据流的所有接口和类都是在java.io包中定义的,因此应在程序开头加入 import java.io.* 2 ...
- 【java】java学习笔记之java oop(面向对象)
如下图所示为笔者总结的java oop(面向对象)学习笔记,其中,附带有代码示例(未展开),方便理解记忆.需要源文件的请到我的资源中下载,下载地址:https://download.csdn.net/ ...
- Java学习笔记01—Java概述、数据类型、变量、标识符、类型转换
1. Java概述 1.1 Java语言发展史(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Uni ...
- java rhino 下载_8.4(Java学习笔记)java脚本引擎(Rhino)
一.java脚本引擎 java脚本引擎是沟通java和脚本语句之间的桥梁,可以通过对应的脚本引擎在java中调用各种脚本语言. 二.脚本引擎执行脚本代码 ScriptEngineManager:为Sc ...
最新文章
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
- 一个阿里云 MYSQL 服务 RDS 下的查询优化
- 模糊逻辑系统_在模糊逻辑系统中工作 人工智能
- day5-shutil模块
- 广度优先搜索——字串变换(洛谷 P1032)
- swoole php input,介绍swoole异步群发模板消息
- 奇安信代码安全实验室帮助 RedHat 修复两个 oVirt 漏洞,获官方致谢
- 实现Modbus Rtu 服务端 通过RS485转4G方式 实现远程采集传输串口设备数据
- 企业常用OSPF组网配置示例
- 思迈特软件Smartbi!这才是你该选用的企业bi报表工具!
- stm32f4定时器时钟频率/选择
- 高德地图JS-API开发—测距
- 机器学习(9)--决策树和随机森林
- springboot实现统一日志管理
- 300最不常用的springboot计算机毕业设计题目汇总,总有你需要用到的
- SCA声明办理 TSCA限用物质检测 TSCA有毒物质控制法案检测
- nfs:server is not responding, still trying(NFS,不能从服务器读取,mount的问题)
- 美的空气能计算机故障维修,美的空气能故障代码,常见故障原因汇总,勿要错过...
- erp沙盘采购总监的心得_(完整word版)ERP沙盘模拟采购总监心得
- 麻将AI 不完全信息博弈学习笔记(完结)
热门文章
- Lect5_Model_free_Control
- 2020平行驾驶与矿山无人化驾驶
- 前端React下载文件到浏览器
- Cmd命令行实验4-ARP
- P2P TELNET
- lte tm模式_LTE 的传输模式及各自的区别和作用
- (转)ibatis Tips 之 java.util.Map作为parameterClass和resultClass
- 如何重置计算机服务到默认状态,电脑慢到让人抓狂?教你如何将Windows10还原到出厂设置...
- 什么是IDC ,可以用来做什么
- 如何点击验证码刷新验证码的问题解决方法?