原文链接:程序控制结构
程序控制结构
程序之所以能够按照人们的意愿执行,主要依靠的就是程序的控制结果。本章重点介绍选择与循环结构语句,学习如何利用这些不同的结构编写出有趣的程序,让程序的编写更灵活,操控更方便。
结构化程序设计语言,强调用模块化、积木式来建立程序。采用结构化程序设计方法,可使程序的逻辑结构清晰、层次分明、可读性好、可靠性强,从而提高了程序的开发效率,保证了程序质量,改善了程序的可靠性。
一般来说程序的结构包含以下3种。
- 顺序结构
- 选择结构
- 循环结构
顺序结构
结构化程序的最简单的结构就是顺序结构,所谓顺序结构程序就是按书写顺序执行的语句构成的程序段。如下程序会先执行第一条语句,然后执行第二条语句,再执行第三条语句。
package cn.coder306;
public class Main {
public static void main(String[] args) {
int d = -1; // 第一条语句
System.out.println(Integer.MAX_VALUE); // 第二条语句
System.out.println(d >>> 1); // 第三条语句
}
}
常情况下,程序的语句按顺序一句一句地执行,构成了顺序结构。有一些程序并不按顺序执行语句,这个过程称为“控制的转移”,它涉及了另外两类程序的控制结构,即分支结构和循环结构。
选择结构(条件语句-if…else)
选择结构也称为分支结构,在许多实际问题的程序设计中,根据输入数据和中间结果的不同情况需要选择不同的语句组执行,在这种情况下,必须根据某个变量或表达式的值作出判断,以决定执行哪些语句和跳过哪些语句不执行。选择结构也可称为条件语句。
如下程序,实现一个音量判断的功能,如果音量值小于10,打印出“音量太小”,如果音量值等于10,打印出“音量适合”,如果音量值大于10,打印出“音量太大”。
package cn.coder306;
public class Main {
public static void main(String[] args) {
volumeControl(10);
}
// 音量控制器
public static void volumeControl(int i) {
if(i < 10) {
System.out.println("音量太小");
} else if(i == 10){
System.out.println("音量适合");
} else {
System.out.println("音量太大");
}
}
}
选择结构主要有以下几种:
- if 判断
- if…else…
- if…else if…else…
- switch case
if语句
语法:
if(布尔表达式)
{
//如果布尔表达式为true将执行的语句
}
实例:
package cn.coder306;
public class Main {
public static void main(String[] args) {
volumeControl(10);
}
// 音量控制器
public static void volumeControl(int i) {
if(i < 10) {
System.out.println("音量小于10");
}
}
}
if…else语句
语法:
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
实例:
package cn.coder306;
public class Main {
public static void main(String[] args) {
volumeControl(10);
}
// 音量控制器
public static void volumeControl(int i) {
if(i < 10) {
System.out.println("音量小于10");
}else{
System.out.println("音量大于等于10");
}
}
}
if…else if…else 语句
语法:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
实例:
package cn.coder306;
public class Main {
public static void main(String[] args) {
volumeControl(10);
}
// 音量控制器
public static void volumeControl(int i) {
if(i < 10) {
System.out.println("音量太小");
} else if(i == 10){
System.out.println("音量适合");
} else {
System.out.println("音量太大");
}
}
}
注意:
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
switch case 语句
语法:
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
switch case 语句有如下规则:
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
public class Test {
public static void main(String args[]){
//char grade = args[0].charAt(0);
char grade = 'C';
switch(grade)
{
case 'A' :
System.out.println("优秀");
break;
case 'B' :
case 'C' :
System.out.println("良好");
break;
case 'D' :
System.out.println("及格");
break;
case 'F' :
System.out.println("你需要再努力努力");
break;
default :
System.out.println("未知等级");
}
System.out.println("你的等级是 " + grade);
}
}
循环结构
循环结构是程序中的另一种重要结构,它和顺序结构、选择结构共同作为各种复杂程序的基本构造部件。循环结构的特点是在给定条件成立时,反复执行某个程序段。通常我们称给定条件为循环条件,称反复执行的程序段为循环体。循环体可以是复合语句、单个语句或空语句。在循环体中也可以包含循环语句,实现循环的嵌套。
Java中有三种主要的循环结构:
- while 循环
- do…while 循环
- for 循环
while循环
语法:
// 只要布尔表达式为 true,循环就会一直执行下去。
while( 布尔表达式 ) {
// 循环内容
}
实例:
小朋友数数字从1数到100
package cn.coder306;
public class Main {
public static void main(String[] args) {
readNumbers(100);
}
// 数数字
public static void readNumbers(int num) {
int i = 0;
while(i <= num) {
System.out.println("数字:" + i++);
}
}
}
do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);
// 布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false
实例:
比如超时购物,需要先选购商品,然后才能结账,这时候就需要先让顾客进入到超时中选购,选购满了后然后再出来。
package cn.coder306;
public class Main {
public static void main(String[] args) {
shopping(100);
}
// 超时购物
public static void shopping(int num) {
int i = 0;
do{
i++;
System.out.println("选购商品数量:" + i);
}while(i <= num);
}
}
for循环
语法:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。
实例:
package cn.coder306;
public class Main {
public static void main(String[] args) {
readNumbers(100);
}
// 数数字
public static void readNumbers(int num) {
for(int i = 0 ; i < num; i++) {
System.out.println("数字:" + i);
}
}
}
java增强for循环
语法:
Java5 引入了一种主要用于数组的增强型 for 循环。Java 增强 for 循环语法格式如下:
// 表达式可以是数组或集合
for(声明语句 : 表达式)
{
// 代码句子
}
实例:
package cn.coder306;
public class Main {
public static void main(String[] args) {
int [] numbers = {10, 20, 30, 40, 50};
readNumbers(numbers);
}
// 读数字
public static void readNumbers(int[] numbers) {
for(int n : numbers) {
System.out.println("数字:" + i);
}
}
}
循环跳出
在Java语言中,有一些跳离的语句,如break、continue等语句。break语句和continue语句都是用来控制程序的流程转向的,适当地和灵活地使用它们可以更方便或更简洁地进行程序的设计。
continue:
当读到数字20的时候,不打印出来,继续下一个数字打印。
package cn.coder306;
public class Main {
public static void main(String[] args) {
int [] numbers = {10, 20, 30, 40, 50};
readNumbers(numbers);
}
// 读数字
public static void readNumbers(int[] numbers) {
for(int n : numbers) {
if(n == 20){
// 跳到for循环继续读取下一个数字
continue;
}
System.out.println("数字:" + i);
}
}
}
打印结果:
10
30
40
50
break:
当读到数字30的时候,跳出循环。
package cn.coder306;
public class Main {
public static void main(String[] args) {
int [] numbers = {10, 20, 30, 40, 50};
readNumbers(numbers);
}
// 读数字
public static void readNumbers(int[] numbers) {
for(int n : numbers) {
if(n == 30){
// 跳出循环
break;
}
System.out.println("数字:" + i);
}
}
}
打印结果:
10
20
深入探讨可以加笔者QQ:1120855315
点击获取免费Java免费视频
添加QQ群837949026可以领取更多学习资料