本文是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语言提供了ifswitch语句用来开发分支结构的程序。循环结构在给定条件下重复执行一些程序段,Java语言提供了whiledo-whilefor语句实现循环结构。

二、分支结构

程序中有些程序段的执行是有条件的,当条件成立时,执行一些程序段,当条件不成立时执行另一些程序段或者不执行,这种结构称为分支结构,也叫选择结构。

1、单分支if语句

单一的if语句是最常用的单分支结构,使用一个布尔表达式进行条件判断。如果布尔表达式的值为true,表示条件满足,则执行if语句后面紧跟的{}中的代码块。

Created with Raphaël 2.2.0 开始 布尔表达式 要执行的语句 结束 yes no

单分支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后面紧跟的{}中的代码块。

Created with Raphaël 2.2.0 开始 布尔表达式 要执行的语句1 结束 要执行的语句2 yes no

双分支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语句。

Created with Raphaël 2.2.0 开始 布尔表达式1 要执行的语句1 结束 布尔表达式2 要执行的语句2 布尔表达式3 要执行的语句3 要执行的语句4 yes no yes no yes no

多分支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");}}

说明:

  • 表达式返回结果的数据类型可以是bytecharshortintenumString
  • 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时,直接执行循环体之后的代码。

Created with Raphaël 2.2.0 开始 布尔表达式 循环体(需要重复执行的语句) 结束 yes no

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时,直接执行循环体之后的代码。

Created with Raphaël 2.2.0 开始 循环体 布尔表达式 结束 yes no

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循环语句使用三个表达式,分别用来初始化循环变量,判断循环执行条件,以及改变循环变量。

Created with Raphaël 2.2.0 开始 表达式1(初始化循环变量) 表达式2(布尔表达式) 循环体 表达式3(通常用来改变循环变量的值) 结束 yes no

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,将循环变量的值i1,再执行表达式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.Mathjava.util.Random。类java.lang.Mathrandom()方法可以生成大于等于0.0小于1.0double类型的随机数;类java.util.Random中提供了一些列的方法可以生成指定范围的随机数,如nextInt()nextDouble()等。
  • 本例中代码random.nextInt(26)的作用是生成一个大于等于0,小于26之间的一个随机整数。
  • 本例中r += 97r的值是区间[97, 122]内的整数,这个区间的整数与ASCII中的小写字母恰好对应。而(char) r将一个整数转换成对应的字符。

4、break语句

Java中提供了break语句,可用于switch语句或whiledo-whilefor循环语句,如果程序执行到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语句可用于fordo-whilewhile语句的循环体中,如果程序执行到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初始化为1i <= 9,共循环9次,System.out.println()可使得外循环每循环一次换一行。
  • 内循环的循环变量j初始化为1j <= 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初始化为1i <= row,用来控制行数。外层循环中的System.out.println()用来控制换行。
  • 对于第一个内循环,循环变量j初始化为row代表的行数值,当外循环的循环变量i自增时,由于j >= i,故内循环的循环次数减少,以此来控制每行前面输出的空格数量。
  • 对于第个二内循环,循环变量k初始化为1,当外循环的循环变量i的自增时,由于k <= 2 * i - 1,故内存循环次数以1、3、5、7、…的顺序递增,依次来控制每行输出的*数量。

JAVA学习笔记 03 - JAVA语言程序结构相关推荐

  1. Java学习笔记1:Java中有关print、println、printf的用法和区别

    Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...

  2. Java学习笔记(java基础)

    Java学习笔记(第一周) Java 介绍 Java 发展方向 JVM , JDK , JRE 名词解释 Java语言的特点 Java安装 安装包的下载 配置环境变量 验证是否安装成功 Java的第一 ...

  3. Java学习笔记2.4.3 选择结构 - 多分支结构

    文章目录 零.本讲学习目标 一.多分支结构概述 (一)并列式多分支结构 (二)嵌套式多分支结构 (三)延拓式多分支结构 (四)开关式多分支结构 二.案例演示 方法一.采用并列式多分支结构评定成绩等级 ...

  4. Java 学习笔记(4)——java 常见类

    上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法.其实Java相比于C来说强大的另一个原因是Java中提供 ...

  5. java学习笔记(一) ----java下常用的包功能

    ***java下常用的包*** java.lang----包含一些java语言的核心类,如String,Math,Integer,System,Thread,提供常用的功能. java.awt---- ...

  6. Java学习笔记-7.Java IO流

    一.输入/输出流 1.流:不同类型的输入.输出源    数据流:输入或输出的数据 Java数据流的所有接口和类都是在java.io包中定义的,因此应在程序开头加入 import java.io.* 2 ...

  7. 【java】java学习笔记之java oop(面向对象)

    如下图所示为笔者总结的java oop(面向对象)学习笔记,其中,附带有代码示例(未展开),方便理解记忆.需要源文件的请到我的资源中下载,下载地址:https://download.csdn.net/ ...

  8. Java学习笔记01—Java概述、数据类型、变量、标识符、类型转换

    1. Java概述 1.1 Java语言发展史(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Uni ...

  9. java rhino 下载_8.4(Java学习笔记)java脚本引擎(Rhino)

    一.java脚本引擎 java脚本引擎是沟通java和脚本语句之间的桥梁,可以通过对应的脚本引擎在java中调用各种脚本语言. 二.脚本引擎执行脚本代码 ScriptEngineManager:为Sc ...

最新文章

  1. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
  2. 一个阿里云 MYSQL 服务 RDS 下的查询优化
  3. 模糊逻辑系统_在模糊逻辑系统中工作 人工智能
  4. day5-shutil模块
  5. 广度优先搜索——字串变换(洛谷 P1032)
  6. swoole php input,介绍swoole异步群发模板消息
  7. 奇安信代码安全实验室帮助 RedHat 修复两个 oVirt 漏洞,获官方致谢
  8. 实现Modbus Rtu 服务端 通过RS485转4G方式 实现远程采集传输串口设备数据
  9. 企业常用OSPF组网配置示例
  10. 思迈特软件Smartbi!这才是你该选用的企业bi报表工具!
  11. stm32f4定时器时钟频率/选择
  12. 高德地图JS-API开发—测距
  13. 机器学习(9)--决策树和随机森林
  14. springboot实现统一日志管理
  15. 300最不常用的springboot计算机毕业设计题目汇总,总有你需要用到的
  16. SCA声明办理 TSCA限用物质检测 TSCA有毒物质控制法案检测
  17. nfs:server is not responding, still trying(NFS,不能从服务器读取,mount的问题)
  18. 美的空气能计算机故障维修,美的空气能故障代码,常见故障原因汇总,勿要错过...
  19. erp沙盘采购总监的心得_(完整word版)ERP沙盘模拟采购总监心得
  20. 麻将AI 不完全信息博弈学习笔记(完结)

热门文章

  1. Lect5_Model_free_Control
  2. 2020平行驾驶与矿山无人化驾驶
  3. 前端React下载文件到浏览器
  4. Cmd命令行实验4-ARP
  5. P2P TELNET
  6. lte tm模式_LTE 的传输模式及各自的区别和作用
  7. (转)ibatis Tips 之 java.util.Map作为parameterClass和resultClass
  8. 如何重置计算机服务到默认状态,电脑慢到让人抓狂?教你如何将Windows10还原到出厂设置...
  9. 什么是IDC ,可以用来做什么
  10. 如何点击验证码刷新验证码的问题解决方法?