Java语言基础

本文详细介绍了Java中的流程控制语句,包括选择结构和循环结构。选择结构涉及if else和switch case语句,分别讲解了单分支、双分支、多分支以及嵌套结构。循环结构涵盖for、while和do...while循环,强调了循环控制关键字break和continue的作用。通过对这些基础概念的理解,可以帮助开发者更好地控制程序执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4、流程控制语句

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

4.1 流程结构语句分类

  • 顺序结构
  • 选择结构
  • 循环结构

4.2 顺序结构

顺序结构是最简单的程序结构,也是最常用的程序结构,只需要按照解决问题的顺序写出相应的语句即可。顺序结构语句没有特定的语法结构,它的执行顺序是按照代码的先后顺序,自上而下,依次执行。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。

4.3 选择结构

选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。它是通过判断某些特定条件是否满足来决定下一步的执行流程,是非常重要的控制结构。循环结构和异常处理结构中也可以带有else子句,也可以看作是特殊形式的选择结构。if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,则不能省略。
常见的有单分支选择结构双分支选择结构多分支选择结构以及嵌套的分支结构,形式比较灵活多变,具体使用哪一种最终还是取决于逻辑需求。
使用选择结构语句时,要用条件表达式来描述。

条件表达式可以分为两类: 关系表达式和逻辑表达式
条件表达式的取值为逻辑值(也称布尔值):真(true) 和假(false)

关系运算符和关系表达式
关系运算是比较简单的一种逻辑运算,关系运算符的优先次序为:
< 、 <= 、 > 、 >= 优先级相同,高;= = 、 != 优先级相同,低。
用关系运算符连接起来的式子称为关系表达式。
关系表达式的值是boolean类型(真/假)。

逻辑运算符和逻辑表达式
提供了3个逻辑运算符,其中一个是单目运算符:
&&、||、~ (~是单目运算符)
逻辑表达式也只有两个值:真和假

4.3.1 两种结构

  • if else语句
  • switch case语句

4.3.2 if else 语句

① 单分支选择结构

单分支选择结构是最简单的一种形式,其语法如下所示:

if(表达式)
{
	语句块;
}

当表达式值为true时,表示条件满足,语句块将被执行,否则该语句块将不被执行,继续执行后面的代码(如果有)。

② 双分支选择结构

双分支选择结构的语法为:

if 表达式
{
	语句块 1;
}
else
{
	语句块 2;
}

当表达式值true时,执行语句块 1 ,否则执行语句块 2。

for example:

import java.util.*;

class Demo02
{
	/*
	数据:年份year=2019
	指令:
		1.判断year是否是4的倍数且不是100的倍数
		2.是 是闰年
		  否 不是闰年	
	*/
	public static void main(String[] args) 
	{
		int year=2019;
		System.out.print(year+"年");
		if(year%4==0&&year%100!=0)
		{
			System.out.println("是闰年");
		}
		else
		{
			System.out.println("不是闰年");
		}
	}
}

拓展知识:
三元运算符,用来完成简单的选择逻辑,即根据条件判断,从两个选择中选择一种执行,可以实现与选择结构相似的效果。使用格式如下:

(条件表达式)?表达式1:表达式2

运算规则:
判断条件表达式,结果为一个布尔值

  • true,运算结果为表达式1
  • false,运算结果为表达式2

三元运算符根据比较判断后,给出的也是两个结果,所以,这种情况和if语句的第二种格式很相似在某些情况是可以相互转换的。

  • 三元运算符的操作都可以使用if语句改进,反之不成立;
  • 当if语句控制的语句体是一条输出语句时,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回,而输出语句不能作为一个返回结果。
③ 多分支选择结构

多分支选择结构提供了更多的选择,可以实现复杂的逻辑,多分支选择结构的语法为:

// A code block
if(条件表达式1)
{
	语句块1;
}
else if(条件表达式2)
{
	语句块2;
}
else if(条件表达式3)
{
	语句块3;
}
...
else
{
	语句块n;
}
④ 选择结构的嵌套

选择结构可以进行嵌套来表达复杂的逻辑,语法如下:

if(表达式 1)
{
	语句块 1;
  if(表达式 2)
  {
		语句块 2
	}
  else
	{
    	语句块 3
	}
}
else
{
  if(表达式 4)
  {
		语句块 4;
	}
}

for example:

import java.util.*;

public class Demo01
{
	/*
	数据:
		输入:年龄age 体重weight 身高height
		输出:BMI指数
	指令:
		1.输入年龄
		2.判断年龄是否小于20
			是 ->7
			否 ->3
		3.输入体重、身高
		4.转换单位
		5.计算BMI指数
		6.
			BMI<18.5 ->偏瘦
			18.5<=BMI<25.0 ->正常
			25.0<=BMI<30.0 ->超重
			BMI>=30.0 ->过胖
		7.退出
	*/
	public static void main(String[] args)
	{
		Scanner in=new Scanner(System.in);
		System.out.print("请输入你的年龄:");
		int age=in.nextInt();
		if(age<20)
		{
			System.out.println("你的年龄不适合");
		}
		else
		{
			System.out.print("请输入你的体重和身高(以英镑为单位):");
			double weight=in.nextDouble();
			double height=in.nextDouble();
			weight*=0.45359237;
			height*=0.0254;
			double BMI=height/Math.pow(weight,2);
			if(BMI<18.5)
			{
				System.out.println("偏瘦");
			}
			else if(BMI<25.0)
			{
				System.out.println("正常");
			}
			else if(BMI<30.0)
			{
				System.out.println("超重");
			}
			else
			{
				System.out.println("过胖");
			}
		}
	}
}

4.3.3 switch case 语句

switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分。switch case 语句语法格式如下:

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

格式解释:

  • switch表示这是switch语句,表达式取值byte short int char String 枚举
  • case后面跟的是要和表达式进行比较的值
  • 语句体部分可以是一条或多条语句
  • break表示中断,结束的意义,可以结束switch语句
  • default语句表示所有情况都不匹配的时候,就执行该出的内容,和if语句的else相似

switch case 语句有如下规则:

  1. switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
  2. switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  3. 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
  4. switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
  5. switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断如果 case 语句块中没有 break 语句时,JVM 并不会顺序输出每一个 case 对应的返回值,而是继续匹配,匹配不成功则返回默认 case。如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。如果当前匹配成功的 case 语句块没有 break 语句,则从当前 case 开始,后续所有 case 的值都会输出,如果后续的 case 语句块有 break 语句则会跳出判断。

注意事项

  • case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
  • default不建议省略
  • break可以省略,表示当前不结束
  • default的位置不一定要在最后,可以在任意位置
  • switch语句结束的条件,break或者执行到末尾

for example:

import java.util.*;

public class Demo07
{
	/*
	数据:
		输入:一个十进制数
		输出:该数的十六进制形式
	指令:
		1.输入一个十进制数
		2.定义一个空字符串
		3.该数对16取余 结果加到字符串前边
		4.16除该数 结果赋值给原数
		5.判断该数是否为0
		6.为0 执行7
		  不为0 返回3
		7.输出字符串 即为原十进制数的十六进制形式
		8.结束
	*/
	public static void main(String[] args) 
	{
		Scanner in=new Scanner(System.in);
		//write your code
		System.out.print("Enter a number:");
		int number=in.nextInt();
		System.out.print("十进制数:"+number);
		String str="";
		int n1=number/16;
		int n2=number%16;
		
		number=n1;
		str=Demo07.tranform(str,n2);
		while(number!=0)
		{
			n1=number/16;
			n2=number%16;
			number=n1;
			str=Demo07.tranform(str,n2);
		}
			System.out.println("转为十六进制数为:"+str);
	}

	static String tranform(String str,int n)
	{
		if(n<10)
		{
			str=n+str;
		}
		else
		{
			switch(n)
			{
				case 10:
				{
					str='A'+str;
					break;
				}
				case 11:
				{
					str='B'+str;
					break;
				}
				case 12:
				{
					str='C'+str;
					break;
				}
				case 13:
				{
					str='D'+str;
					break;
				}
				case 14:
				{
					str='E'+str;
					break;
				}
				case 15:
				{
					str='F'+str;
					break;
				}
			}
		}
		return str;
	}

}

4.3.4 选择结构switch和if语句的各自使用场景

在做判断的时候,有两种选择,if语句和switch语句,它们都有各自使用场景。

if语句的使用场景:

  • 针对结果是boolean类型的判断
  • 针对一个范围的判断
  • 针对几个常量值的判断

switch语句使用场景:

  • 针对几个常量值的判断

4.4 循环结构

顺序结构的程序语句只能被执行一次。如果有同样的操作执行多次,就需要使用循环结构。循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。

  • 根据判断条件,循环结构又可细分为以下两种形式:先判断后执行的循环结构和先执行后判断的循环结构。
  • 循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构
  • 循环结构可以看成是一个条件判断语句和一个向回转向语句的组合。

4.4.1 Java 循环结构 - for, while,do…while

Java中有三种主要的循环结构:

  • for 循环
  • while 循环
  • do…while 循环
① for循环

虽然所有循环结构都可以用 while 或者 do…while表示,但for 循环,使一些循环结构变得更加简单
for循环执行的次数是在执行前就确定的。语法格式如下:

for(初始化; 布尔表达式; 更新)
{
    //代码语句
}

for 循环有以下几点说明:

  1. 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  2. 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  3. 执行一次循环后,更新循环控制变量。
  4. 再次检测布尔表达式。循环执行上面的过程。
import java.util.*;

public class Demo04
{
	/*
	数据:
		输入:两个正整数数n1 n2
		输出:n1 n2的最大公约数
	指令:
		1.输入两个正整数数
		2.暂设最大公约数为1
		3.从2开始找
		4.如果找到一个数能同时被两数整除 更新最大公约数
		5.直到n1和n2其中较小者
		6.输出最大公约数
		7.结束
	*/
	public static void main(String[] args) 
	{
		Scanner in=new Scanner(System.in);
		//write your code
		System.out.print("Enter n1 and n2:");
		int n1=in.nextInt();
		int n2=in.nextInt();
		int gcd=1;
		int smaller=n1<=n2?n1:n2;
		for(int i=2;i<=smaller;i++)
		{

			if(n1%i==0&&n2%i==0)
			{
				gcd=i;
			}
		}
		System.out.println("n1="+n1+"和"+"n2="+n2+"的最大公约数是:"+gcd);
	}
}
② while 循环

while是最基本的循环,它的结构为:

while( 布尔表达式 )
{
  //循环内容
}

只要布尔表达式为 true,循环就会一直执行下去。

for example:

import java.util.*;

public class Demo08
{
	/*
	数据:一个随机数(计算机给出) 输入一个数字
	指令:
		1.计算机产生一个随机数(0~100)
		2.输入一个数字
		3.判断该数字与随机数的大小
		4.
			若大于 输出“过大” 返回2
			若小于 输出“过小” 返回2
			否则 执行5
		5.输出“正确”
		6.退出
	*/
	public static void main(String[] args) 
	{
		Scanner in=new Scanner(System.in);
		//write your code
		System.out.println("Guess a magic number between 0 and 100");
		int number=(int)(Math.random()*101);
		System.out.print("Enter you number:");
		int yourNumber=in.nextInt();
		while(yourNumber!=number)
		{
			if(yourNumber<number)
			{
				System.out.println("Your guess is too low");
			}
			else
			{
				System.out.println("Your guess is too high");
			}
			System.out.print("Enter you number:");
			yourNumber=in.nextInt();
		}
		System.out.println("Yes, the number is "+number);
	}
}
③ do…while 循环

对于 while 语句而言,如果不满足条件,则不能进入循环。但有时即使不满足条件,也需要至少执行一次。do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。代码格式如下:

do
{
	//代码语句
}
while(布尔表达式);

注意:
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。

4.5 break与continue 关键字

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。break 的用法很简单,就是循环结构中的一条语句。

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。在 for 循环中,continue 语句使程序立即跳转到更新语句。在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。continue 就是循环体中一条简单的语句。

结语

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值