第2章 基本语法(下):程序流程控制

Posted Aiden_Zhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第2章 基本语法(下):程序流程控制相关的知识,希望对你有一定的参考价值。

续接《第2章 基本语法(上):变量与运算符》

2.5 程序流程控制

  • 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成 一定功能 的小逻辑模块 。
  • 流程控制方式采用结构化程序设计中规定的三种基本流程结构,即
    • 顺序结构:程序从上到下逐行的执行,中间没有任何判断和跳转
    • 分支结构:根据条件,选择性地执行某段代码,有if-else和switch-case两种分支结构
    • 循环结构:根据循环条件,重复性地执行某段代码,有while、do…while、for三种循环语句(JDK1.5提供了foreach循环,方便遍历集合、数组元素)

2.5.1 顺序结构

Java中定义成员变量时采用合法的前向引用。如:

//正确的例子
public class Test
{
	int num1 = 2;
	int num2 = num1 + 3;
}

// 错误的例子
public class Test
{
	int num2 = num1 + 3;
	int num1 = 2;
}

2.5.2 分支语句1:if-else结构

if-else语句的三种表达格式

// 格式1:
if(条件表达式)
{
	执行代码块;
}

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

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

if-else分支结构的使用说明

  • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
  • 语句块只有一条执行语句时,一对花括号可以省略,但建议保留
  • if-else语句结构可以根据需要嵌套使用
  • 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
  • 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓;而当多个条件是“包含”关系时,“小上大下/子上父下”

举一些例子:

class IfTest 
{
	public static void main(String[] args) 
	{
		// 举例1
		int heartBeats = 79;
		if (heartBeats < 60 || heartBeats > 100)
		{
			System.out.println("需要做进一步检查");
		}
		System.out.println("检查结束");
		
		// 举例2:二选一
		int age = 23;
		if (age < 18)
		{
			System.out.println("你可以多看动画片");
		}
		else
		{
			System.out.println("你可以看成人电影了");
		}

		// 举例3:多选一
		if (age < 0)
		{
			System.out.println("输入的数据非法!");
		}
		else if (age < 18)
		{
			System.out.println("青少年时期");
		}
		else if (age < 35)
		{
			System.out.println("青壮年时期");
		}
		else if (age < 60)
		{
			System.out.println("中年时期");
		}
		else
		{
			System.out.println("老年时期");
		}
	}
}

2.5.3 分支语句2:switch-case结构

switch-case结构语法格式

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

switch-case语句的有关规则:

  • swtich(表达式)中表达式的值必须是一下几种类型之一:byte, short, char, int, 枚举(JDK 5.0), String(JDK 7.0)
  • case子句中的值必须是常量,不能是变量或不确定的表达式
  • 同一个switch语句,所有case子句中的常量值互不相同
  • break语句用来在执行完一个case分支后使程序跳出switch语句块:如果没有break,程序会顺序执行到swtich结尾
  • default子句是可任选的,同时位置也灵活,当没有匹配的case时,执行default

说明

  • 凡是可以使用switch-case的结构,都可以转化为if-else;反之,不成立
  • 当我们写分支结构时,发现既可以使用switch-case(switch中表达式中取值情况不多),同时可以使用if-else,优先选择switch-case(switch-case效率稍高)

2.5.4 循环结构1:for循环

关于for循环

  • for循环语句格式
    for(①初始化部分; ②循环条件部分; ④迭代部分)
    {③循环体部分;}
  • 执行过程:②→③→④→②→③→④→②→③→④→……→②→③→④→
  • 说明:
    • 循环条件部分为boolean类型表达式,当值为false时,退出循环
    • 初始化部分可以声明多个变量,但必须是同一种类型,用逗号隔开
    • 迭代部分可以有多个变量更新,用逗号隔开

for循环执行演示

栗子1:输出5个Hello World!

class ForTest 
{
	public static void main(String[] args) 
	{
		for (int i=1; i<=5; i++)
		{
			System.out.println("Hello Wrold!");
		}
	}
}

栗子2(熟悉for循环执行过程):

class ForTest 
{
	public static void main(String[] args) 
	{
		int num = 1;
		for (System.out.println('a'); num <= 3; System.out.println('c'), num++)
		{
			System.out.println('b');
		}
		// 输出结果:abcbcbc
	}
}

栗子3:遍历100以内的偶数,输出偶数的个数以及所有偶数的和

class ForTest 
{
	public static void main(String[] args) 
	{	
		int sum = 0;
		int count = 0;
		for (int i = 1; i <= 100; i++)
		{
			if (i % 2 == 0)
			{
				sum += i;
				count++;
			}
		}
		System.out.println("个数为" + count);
		System.out.println("总和为" + sum);
	}
}

栗子4:编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“ foo“, 在每个5的倍数行上打印”biz“, 在每7的倍数行上打印输出”baz“ 。

class ForTest 
{
	public static void main(String[] args) 
	{
		for (int i = 1; i <= 150; i++)
		{
			System.out.print(i);
			if (i % 3 == 0)
			{
				System.out.print(" foo");
			}
			if (i % 5 == 0)
			{
				System.out.print(" biz");
			}
			if (i % 7 == 0)
			{
				System.out.print(" baz");
			}
			System.out.println();
		}
	}
}

2.5.5 循环结构2:while循环

关于while循环

  • 语法格式
    ①初始化部分
    while(②循环条件部分)
    {③循环体部分; ④迭代部分}
  • 执行过程:②→③→④→②→③→④→②→③→④→……→②→③→④→
  • 说明:
    • 注意不要忘记声明④迭代部分,否则将陷入死循环
    • for循环和while循环可以相互转换

一个栗子:求1~100的和

class WhileTest 
{
	public static void main(String[] args) 
	{
		int result = 0;
		int i = 1;
		while (i <= 100)
		{
			result += i;
			i++;
		}
		System.out.println("result = " + result);
	}
}

2.5.6 循环结构3:do-while循环

关于do-while循环

  • 语法格式
    ①初始化部分;
    do{③循环体部分; ④迭代部分;
    }while(②循环条件部分);
  • 执行过程:①→③→④→②→③→④→②→③→④→……→②→③→④→②
  • 说明:do-while循环至少执行一次循环体

一个栗子:输出1~100的和

class DoWhileLoop 
{
	public static void main(String[] args) 
	{
		int result = 0, i = 1;
		do
		{
			result += i;
			i++;
		}while (i <= 100);
		System.out.println("result = " + result);
	}
}

循环语句综合例题:从键盘读入个数不确定的整数,并判断读入的整数和负数的个数,输入为0时,结束程序。

import java.util.Scanner;

class PositiveNegative 
{
	public static void main(String[] args) 
	{
		Scanner reader = new Scanner(System.in);
		int positiveNumber = 0; //记录正数的个数
		int negativeNumber = 0; //记录负数的个数
		{
			System.out.println("请输入一个整数:");
			int num = reader.nextInt();
			if (num > 0)
			{
				positiveNumber++;
			}
			else if (num < 0)
			{
				negativeNumber++;
			}
			else
			{
				break;
			}
		}
		System.out.println("正数的个数为:" + positiveNumber);
		System.out.println("负数的个数为:" + negativeNumber);
	}
}

2.5.7 break、continue的使用

break语句

  • break语句用于终止某个语句块的执行
  • break语句出现在错层嵌套的语句块中时,可以通过标签指明要终止的是哪一层的语句块

continue语句

  • continue只能使用在循环结构中
  • continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环
  • continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的时哪一层循环

关于break和continue的其他说明

  • break只能用于swtich语句和循环语句中
  • continue只能用在循环语句中
  • 二至功能类似,但continue是终止本次循环,break是终止本层循环
  • break、continue之后不能再有其他语句,因为程序永远也不会执行其后的语句

以上是关于第2章 基本语法(下):程序流程控制的主要内容,如果未能解决你的问题,请参考以下文章

基本语法(下):程序流程控制

基本语法(下):程序流程控制

第1章 选择流程控制语句

第1章选择流程控制语句

第05章 程序控制结构

第2章循环流程控制语句