java控制流

流程控制

一、分支结构

1. if else

有三种情况:
在这里插入图片描述
在这里插入图片描述

第一种:

if (条件表达式){
	执行表达式
}

第二种:

if(条件表达式){
	执行表达式1
}else{
	执行表达式2
}

第三种

if(条件表达式1){
	执行表达式1
} else if(条件表达式2){
	执行表达式2
	......
}else{
	执行表达式n
}

举例代码如下,三种情况:

class IfTest 
{
	public static void main(String[] args) 
	{
		// 举例一
		int heartbeats = 70;
		if (heartbeats<60 || heartbeats >100){
			System.out.println("需要进一步检查");
		}
		System.out.println("检查结束");

		//举例2
		int age = 20;
		if (age < 18){
			System.out.println("还未成年");
		}else{
			System.out.println("成年咯");
		}
	
		//举例三
		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. switch 语句

switch语句是基于一个表达式的值决定要执行的一组语句。

基本语法如下

switch(表达式){
case c1:
	语句组1;
	break;
case c2:
	语句组2;
	break;
.....
case ck:
	语句组k;
	break;
[default:
	语句组;
	break;]
}

switch语句是意思是:计算表达式的值,用该值依次和c1,c2,…ck比较,如果符合其中之一ci,那么就执行语句组i,如果没有的话就执行default

说明:
  • switch中的表达式的值,可以是整型、枚举型或者String类的对象。
  • 整型表达式必须是int兼容的对象,即byte short char 和int。
  • switch语句中各case分支既可以是单条语句,也可以是由多条语句组成的语句组,不用{}括起来
  • default子句是可选的,并且最后一个break语句可以省略
  • 不论执行哪个分支,该顺序流都会顺序执行下去,直到break
  • switch结构的功能可以用if else if 来实现,但有时候switch结构更简单,可读性强,但会有限制,如数据类型上受到了限制,如果是double型,那就不能使用switch
switch举例–输出一个日期所包含月份的天数
class switchTest 
{
	public static void main(String[] args) 
	{
		int month = 2;
		int year = 2000;
		int numDays = 0;

		switch(month){
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				numDays = 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				numDays = 30;
				break;
			case 2:
				if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
				{
					numDays = 29;
				}
				else 
					numDays = 28;
				break;
		}
		System.out.println("The date is 2002.2. The number of Days =" + numDays);
	}
}

switch 语句的扩展

我们上面介绍,传统的switch语句存在一些不方便之处,如果一个case分支执行后没有遇到break,会继续执行之后的case分支,直到遇到break。在Java SE 12 和 Java SE 13中,对switch进行扩展
箭头case可以带有一个switch 表达式产生值的语句。“case … ->”分支定义如下:

case label1,label2,....,labeln -> expression;(或者 throw-statement 或 block)

我们可以看到,允许在一个case分支里出现以逗号分隔的多个常量值,程序运行时,这些值任何一个匹配成功,箭头右侧的代码就会被执行,并且在这些代码结束后,将不会允许switch表达式或语句中其他任何分支的代码。

还有一个是用yield someValue 其中someValue 是yield 在case分支产生的switch表达式的值。
Break 和 yield 语句使得switch语句和switch表达式易于区分,yield语句用于switch表达式,而break用于switch语句。传统的冒号case可以使用yield 语句构造switch表达式。例如

int result = switch(s){
case 'FOO':
	yield 1;
case 'BAR':
	yield 2;
default :
	yield 0;
}

二、循环语句

1.while和do while

while 语句使一个语句块在某种条件为真时循环执行。该语句的语法如下:
while(逻辑表达式){
	语句或语句块
}

其中while语句中的表达式必须是逻辑型的。在该语句执行时,首先求表达式的值,如果等于true,则执行while语句块中的语句。直到while表达式的值变为false

do while 语句语法如下:

do{
语句或语句块
} while(逻辑表达式);

do while 在执行的时候,是先执行循环体中的语句,再求表达式的值,直到表达式的值变为false。do while 是在循坏体的底部求表达式的值,所以,do while 语句至少要把循环体中的语句执行一遍。

2.for 语句

for 循坏执行的次数是可以在执行前确定的,for 语句的语法格式是:

for(初始语句; 逻辑表达式 ; 迭代语句){
	语句或语句块
}

for 语句执行时先执行初始语句,判断逻辑表达式的值,当逻辑表达式为true时,执行循环体语句,接着执行迭代语句,然后再去判断逻辑表达式的值。这个过程一直走下去,直到逻辑表达式的值为false。

  • 可以在for循环的初始化部分声明一个变量,它的作用域为整个for循环
  • for 循环通常用于循环次数确定的情况,但也可以根据循环结束条件完成循环次数不确定的情况
  • 在初始化部分和迭代部分可以使用逗号来进行多个操作
  • 初始化,终止以及迭代部分都可以为空语句,但分号不能省略,逻辑表达式为空时,默认表达式为恒真
for(i = 0,j = 10;i < j; i++,j--){
	...
}
for循环经常用于数组各个元素或一个字符串中各个字符的处理,例:用for语句输出一个数组的元素
class forTest 
{
	public static void main(String[] args) 
	{
		int[] array = {32, 87, 3, 589, 12, 1076, 2000};
		for (int i = 0;i < array.length ;i++ ){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}

在这里插入图片描述

3.跳转语句

Java中可以用break 和 continue 两个循坏跳转语句进一步控制循环。这两个语句的一般格式

break[label];
continue[label];

这两个语句都可以带标签(label)使用,也可以不带标签使用。标签是出现在一个语句之前的标识符,标签后面要跟上一个:

label : statement

1.break

不带标签的break就是可以用来终止最内层的循坏体。带了标签的break语句将结束标签所指示的循坏的执行

例子: 在二维数组中搜索指定的值
class breakTest 
{
	public static void main(String[] args) 
	{
		int[][] array = {{32, 87, 3, 589},{12, 1076, 2000, 8},{622, 127, 77, 955}};
		int i = 0; 
		int j = 0;
		int searchfor = 12;
		boolean foundIt = false;
	search:
		for (i = 0;i < array.length ;i++ ){
			for (j = 0;j < array[i].length ;j++ ){
				if (array[i][j] == searchfor){
					foundIt = true;
					break search;
				}
			}
		}
		if (foundIt){
			System.out.println("Found" + searchfor + "at" + i + "," + j);
		}
		else{
		System.out.println("找不到" + searchfor);
		}
	}
}

2.continue

在循环中,continue 语句跳过当前循环的其余语句,执行下一次循环,当然执行下一次循环要判定循环条件是否满足,不带标签的continue是跳过最内层的循坏,并开始执行最内层循环的下一次循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值