【Java语句】

Java程序控制结构

程序的三大控制结构为:顺序结构、循环结构、选择结构。

Java语句

语句是组成Java程序的基础单位,每个语句都必须使用分号作为结束符。除此之外,Java对语句基本没有要求限制,开发人员可以使用具有自己风格特色的方式来编写程序。

例如:声明一个变量可以将各部分放到多行中

int i
= 10
;
System.out.println(i);

//执行结果
10

由于Java是以分号作为一条语句的结束符,所以前3行代码会被视为一条语句,这样声明的变量也是可以正常使用,但是并不推荐这样的代码风格。

同理,因为是以分号来区分语句,也可以将多条语句写到同一行上。

int a, b, c = 10; a = c + 1; b = c - 1;System.out.println(a + ", " + b);

//执行结果
11, 9

将多条语句放在同一行也是可以的,程序可以正常执行。

为了使程序语句排列得更加美观、容易阅读和排除错误,一般使用如下规则格式化源代码。

  • 在一行内只写一个语句,并采用空格、空行来保证语句容易阅读。
  • 在每个复合语句内使用 Tab 键向右缩进。
  • 大括号总是放在单独的一行,便于检查是否匹配。

顺序结构

顺序结构比较简单,就是按照代码书写的顺序一行一行执行。

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");

//执行结果
aaa
bbb
ccc

调整代码的书写顺序,代码的执行顺序也会跟着改变。

分支结构

Java中有两种分支语句:if语句和switch语句。其中,if语句是以布尔表达式或布尔值作为分支条件来进行分支控制,而switch语句则是通过整型数值的匹配来进行分支控制。通过使用分支语句可以控制程序的执行过程。

分支结构,也叫选择结构。解决了顺序结构不能进行判断的缺点,可以根据条件判断的结果来选择执行相应的语句,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,可以绘制程序流程图来辅助程序的结构设计编写出相应的程序流程。

if语句

基础语法结构

if(布尔表达式){
	//当布尔表达式的结果为true时执行的代码
}

如果布尔表达式的结果为true则执行if语句中的代码块,否则则执行if语句之后的代码。

示例

//判断一个数是否大于0
int i = 10;
if(i > 0){
	System.out.println("这是要执行的代码");
}

//执行结果
这是要执行的代码

若此时布尔表达式的值为false则什么都不会打印。

if语句的执行流程图

请添加图片描述

if-else语句

基础语法结构

if(布尔表达式){
	//当布尔表达式的结果为true时执行的代码
}else{
	//当布尔表达式的结果为false时执行的代码
}

if-else语句是双分支语句,在if语句直接接上else语句,表示当if语句中的布尔表达式为false则会执行else语句中的代码。

示例

//判断一个数是奇数还是偶数
int i = 10;
if(i % 2 == 0){
	System.out.println("这是if语句块");
}else{
	System.out.println("这是else语句块");
}

//执行结果
这是if语句块

当i为偶数时程序会打印这是if语句块,否则则会打印这是else语句块。这就是if-else语句的执行流程,通过布尔表达式的结果来控制要执行的语句。

if-else语句执行流程图
请添加图片描述

if-else if-else语句

基础语法结构

if(布尔表达式1){
	//当布尔表达式1的结果为true时执行的代码
}else if(布尔表达式2){
	//当布尔表达式2的结果为true时执行的代码
}else{
	//当布尔表达式1和布尔表达式2的结果都为false时执行的代码
}

if-else if-else语句是多分支语句,if语句的主要功能是给程序提供一个分支,然而在实际的程序设计过程中,只有一个分支显然是远远不够的,这就需要使用多分支的if-else if语句。

示例

int i = 10;
if(i < 10){
	System.out.println("这是if语句");
}else if(i < 20){
	System.out.println("i的值小于20");
}else if(i < 30){
	System.out.println("i的值小于30");
}else{
	System.out.println("这是else语句");
}

//执行结果
i的值小于20

通过上面的示例我们可以得知,i<20是满足条件的且同时i<30也满足条件但却并未执行满足i<30条件后的语句,这和if-else if-else语句的执行流程有关,首先查看i<10的表达式是否为true当不为true时就顺序执行到i<20,此时i<20的结果是为true就执行该分支语句的语句块,执行完之后不会再去查看其他条件是否符合要求。

也就是说,依次查询条件是否满足,如果满足条件就执行相应的语句块,然后结束。无论如何都会有个语句块会被执行,当所有布尔表达式都为false是则执行else语句。

注意事项

  • if语句可以有多个else if语句但它们要在else语句之前。
  • 当其中有一个else if的布尔表达式为true时,其他的else if和else都将跳过执行。

if-else if-else语句执行流程图

请添加图片描述

嵌套if

基础语法结构

if(布尔表达式1){
	if(布尔表达式2){
		//当布尔表达式1和布尔表达式2的结果都为true时执行的代码
	}
}

也可以嵌套使用if-else,if-else if语句,具体的怎么搭配使用则按照情况而定。

if(布尔表达式1){
	if(布尔表达式2){
		//当布尔表达式1和布尔表达式2的结果都为true时执行的代码
	}else{
		//当布尔表达式1的结果为true且布尔表达式2的结果为false时执行的代码
	}
}

示例

//判断某一年是否为闰年
int year = 2000;
if (year % 100 == 0) {
    // 判定世纪闰年
    if (year % 400 == 0) {
        System.out.println("是世纪闰年");
   } else {
        System.out.println("不是世纪闰年");
   }
} else {
    // 普通闰年
    if (year % 4 == 0) {
        System.out.println("是闰年");
   } else {
        System.out.println("不是闰年");
   }
}

//执行结果
是世纪闰年

注意事项

else的匹配问题

int x = 10;
int y = 10;
if (x == 10) 
	if (y == 10)
		System.out.println("aaa");
else
	System.out.println("bbb");

if/else语句之后可以不接大括号,但这时if/else后面只能跟一条语句。上述的代码看上去else语句是和if(x==10)相匹配的,但其实是与if(y == 10)相匹配的,需要注意的就是else是和最近的if语句匹配的

虽然当if/else后面只有一条语句的时候可以不写大括号,但建议还是加上大括号,提高代码的可读性。

switch语句

switch语句也是分支语句,通常搭配case、break、default等关键字使用,不过其相较于if语句来说较为少见。至于如何执行取决于表达式的值和常量表达式的匹配而定,它的所有分支都是并列的,程序执行时,由第一个分支开始查找匹配的值,若匹配,则执行相应的语句块,接着执行之后的语句块,直到遇到break语句才跳出分支,若不匹配则不会执行语句块,而是查询下一个表达式是否匹配。

基础语法结构

switch(表达式){
 	case 值1 : {
 		值匹配时执行的语句;
 		[break;]
 	}
 	case 值2 : {
 		值匹配时执行的语句;
 		[break;]
 	}
 	...
 	default : {
		值都不匹配时执行的语句;
		[break;]
 	} 
}

示例

char level = 'C';
switch (level){
	case 'A':{
		System.out.println("优秀");
		break;
	}
	case 'B':{
		System.out.println("良好");
		break;
	}
	case 'C':{
		System.out.println("一般");
		break;
	}
	case 'D':{
		System.out.println("差劲");
		break;
	}
	default:{
		System.out.println("默认");
	}
}

//执行结果
一般

注意事项

  • switch语句中的变量类型可以是:byte、short、int、char或者string类型,同时case语句得是相应类型的字面量或者常量。

  • switch语句后可以接多个case语句,每个case语句都要有相应的值和冒号。

  • switch语句的表达式和case语句的表达式相匹配时,则会从此case语句开始执行,直到遇到break语句。

  • switch语句后还可以接default语句,表示是当所有case语句都不匹配时,默认执行该语句中的代码,default语句后不用接break语句。

  • case语句后只有一条要执行的代码时,可以省略大括号。

如果case语句块中没有break语句时,匹配成功后,从当前case开始,后续所有case的值都会输出。

int day = 3;
switch(day) {
    case 1:
        System.out.println("星期一");
    case 2:
        System.out.println("星期二");
    case 3:
    	System.out.println("星期三");
    case 4:
    	System.out.println("星期四");
    	break;
    case 5:
    	System.out.println("星期三");
    	break;
}

//执行结果
星期三
星期四

如果case语句块没有和switch语句块相匹配的值且有default语句时,则会执行default语句。

int day = 3;
switch(day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    default:{
    	System.out.println("星期天");
    }
}

//执行结果
星期天

switch语句执行流程图

请添加图片描述

嵌套switch

switch语句也支持嵌套使用。

int x = 1;
int y = 1;
	switch(x) {
		case 1:
			switch(y) {
				case 1:
                    System.out.println("hehe");
                    break;
            }
            break;
        case 2:
            System.out.println("haha");
            break;
    }

switch语句具有一定的局限性,本身的使用频率也较低,且如此嵌套使用的可读性也不好,所以一般很少使用switch语句多数时间都是使用if语句。

循环结构

循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。循环结构包含三个要素:循环变量、循环体和循环终止条件。Java语言提供三种循环,即while循环、do…while循环和for循环。三种循环各有异同,可以用来处理同一问题,一般情况下它们可以互相代替换。

while循环

while循环是Java语言中最基础的循环。

基础语法结构

while(循环条件){
	循环体;
}

当循环条件的结果为true时则会执行其中的循环体,循环条件则是一个有效的boolean表达式。当循环体执行完毕后会再次判断循环条件的结果是否为true,若为true则再次执行循环体,如此反复,直到循环条件的结果为false。所以需要注意在循环条件中的循环变量的值的改变,处理不当则可能会造成死循环。

示例

//计算5的阶乘,5!
int i = 1; 
int res = 1; 
while (i <= 5) { 
	res *= i; 
	i++; 
} 
System.out.println("5的阶乘的结果为:" + res); 

//执行结果
5的阶乘的结果为:120

在上述代码中,定义了两个变量i和res,循环每执行一次i值就加1,判断 的值是否小于等于5,并利用res *= i语句来实现阶乘,相当于先计算出1的阶乘,然后再用1的阶乘 * 2得到2的阶乘,依此类推。当i的值大于5之后,循环便不再执行并退出循环。

while循环是先判断表达式,再执行循环体,也就是说有可能循环体是一次都不执行。

whille循环执行流程图

请添加图片描述

do…while循环

do…while循环和while循环的区别就是,do…while循环至少会执行一次,因为do…while循环的循环条件是在循环体之后的。

基础语法结构

do{
	循环体;
}while(循环条件);

do…while循环首先是先执行一次循环体,再判断while后边的循环条件的结果是否为true,若为true则再次执行循环体,否则退出执行。while语句后必须以分号表示循环结束。

示例

//计算5的阶乘
int i = 1;
int res = 1;
do{
	res *= i;
	i++;
}while(i <= 5);
System.out.println("5的阶乘的结果为:" + res);

//执行结果
5的阶乘的结果为:120

while和do…while循环的区别

  • while循环是先进行判断,再执行循环体。do…while循环则无论如何都先执行一次,再判断。
  • while循环将循环条件放在循环体前面,而do…while循环则将循环条件放在循环体之后,且多了do关键字以及在后面多了个分号。
  • while循环的循环体可能一次都不执行,do…while循环的循环体至少执行一次。

do…while循环执行流程图
请添加图片描述

for循环

在while和do…while循环中,一般会将改变循环变量的语句放在循环体的最末尾,而for循环则是将该语句加入到了循环条件中。虽然while循环和do…while循环已经足够表示所有的循环结构,但Java还是提供了for循环,使一些循环结构变得更加简单。

for循环应该是应用最广泛,功能最强的循环语句。

基础语法结构

for(表达式1;表达式2;表达式3){
	循环体;
}
  • 表达式1:赋值语句,通常用于循环变量声明和初始化。声明循环变量的类型,初始化一个或者多个变量,也可以是空语句。
  • 表达式2:条件语句,循环结构的终止条件。可以是多个布尔表达式利用"&&“或”||"结合成一个大的表达式。
  • 表达式3:迭代语句,循环结构的迭代部分,通常用于修改循环变量的值。特别要注意循环变量的改变,避免造成死循环。

示例

//计算5的阶乘
int res = 1;
for (int i = 1; i <= 5; i++) {
	res *= i;
}
System.out.print("5的阶乘的结果为:" + res);

//执行结果
5的阶乘的结果为:120

同样是计算5的阶乘,但for循环显得更加清晰明了,这也是for循环使用最为广泛的原因。

for循环中的3个表达式必须使用分号";"隔开。3个表达式都可以为空,但要进行相应的处理。若不处理的话可能就是一个无限循环的语句。

//语句最简形式
for(;;){
	循环体
}

1、表达式1为空

for循环中的表达式1通常适用于变量的初始化,这个变量也可以在其他位置声明,就是将其提了出来放到了其他位置。

int res = 1;
int i = 1;	//相当于for循环语句中的表达式1
for (; i <= 5; i++) {
	res *= i;
}
System.out.print("5的阶乘的结果为:" + res);

2、表达式2为空

for循环中的表达式2是循环的终止条件,若为空时则会默认为true,若没有退出循环的操作循环将无限进行下去,因此此时需要使用break语句来跳出循环,避免产生死循环。

int res = 1;
for (int i = 1; ; i++) {
	if(i > 5){	//相当于for循环语句中的表达式2
		break;
	}
	res *= i;
}
System.out.print("5的阶乘的结果为:" + res);

3、表达式3为空

for循环中的表达式3是改变循环变量的迭代语句。若为空时,则表示循环变量不会迭代,若每次循环都不会改变循环变量的值,则意味着每次表达式2都不会改变,这就会导致死循环,致使循环无法正常结束。

int res = 1;
for (int i = 1; i <= 5; ) {
	res *= i;
	i++;	//相当于for循环语句中的表达式3
}
System.out.print("5的阶乘的结果为:" + res);

for循环执行流程图

请添加图片描述

for-each循环

for-each循环是Java 5之后引入的循环语句,也称为增强型for循环。for-each循环适用于访问集合的元素而不进行更改,主要是使用的使其循环遍历的功能。

基础语法结构

for(数据类型 标识符 : 集合){
	循环体;
}

其中,数据类型要和集合中的元素相匹配,标识符则为局部变量的变量名,集合则是需要被遍历的集合对象。每一次循环都会从集合中读取元素,直到遍历结束。

示例

//遍历并打印一个数组
int[] arr = new int[]{12,36,87,61,23,46,52};
for(int i : arr){
	System.out.println("当前i的值为:" + i);
}

//执行结果
当前i的值为:12
当前i的值为:36
当前i的值为:87
当前i的值为:61
当前i的值为:23
当前i的值为:46
当前i的值为:52

break关键字

break关键字主要用于循环语句或switch语句中,其作用大多情况下是终止所在层的循环,而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。有时需要代码在特定的情况下就跳出循环,而不用等循环条件为false才结束循环,这时就需要使用到break。

示例

//在100-200之间找第一个能同时整除3和5的数
for(int i = 100; i <= 200; i++){
	if(i % 3 == 0 && i % 5 == 0){
		System.out.println("i的值为:" + i);
		break;
	}
}

//执行结果
i的值为:105

100-200之前有很多能同时整除3和5的数,但根据执行结果来看并未将所有的结果都打印出来,也就表示当找到第一个可以整除3和5的数之后就执行了break语句跳出了循环。

注意事项

  • break语句对if-else语句不起作用,是对循环语句起作用。
  • 若存在多层循环,break语句只会退出一层循环。

continue关键字

continue关键字和break关键字一样,是用于循环语句中,其作用是提前结束此次循环,进入下一次循环。和break的区别在于,break直接是结束循环,而continue则是中止本次循环的迭代,进入下一次循环的迭代。且continue只能作用于循环结构中。

示例

//找出10-20之间所有不能整除2的数
for(int i = 10; i <= 20; i++){
	if(i % 2 == 0){
		continue;
	}
	System.out.print(i + " ");
}

//执行结果
11 13 15 17 19 

上述代码表示,只要i%2 == 0成立就执行continue语句进入下一次循环,就中止了此次循环,可见在i%2 == 0成立的时候没有打印出相应的数值,也就代表并未执行到后序的语句,也证明进入了下一层循环。

continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值