【Java】韩顺平Java学习日志03——程序控制结构

程序流程控制

程序运行的流程控制决定程序是如何执行的

顺序控制

程序从上到下逐行的执行,中间没有任何判断和跳转
在这里插入图片描述

分支控制

if-else让程序有选择的执行,共有三种

单分支
if(条件表达式)
{
	执行代码块(可以有多条)
}

当条件表达式为true时,就会执行{}中的代码,如果为false,就不执行
在这里插入图片描述

双分支
if(条件表达式)
{
	执行代码块1(可以有多条)
}
else
{
	执行代码块2(可以有多条)
}

当条件表达式为true成立时时,就会执行代码块1,否则执行代码块2
![!](https://img-blog.csdnimg.cn/95e71a538a8743ebbc358c33e9d9a422.png)](https://img-

多分支
if(条件表达式)
{
	执行代码块1(可以有多条)
}
else if
{
	执行代码块2(可以有多条)
}...
else
{
	执行代码块(可以有多条)
}

在这里插入图片描述
多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有,如果有else,如果所有的条件表达式都不成立,则默认执行else
只要找到一个执行入口,判断就结束
在这里插入图片描述

嵌套分支

在一个分支结构又完整的嵌套了另一个完整的分支结构(内层分支和外层分支)

练习题目:

//把字符串转成第一个字符
 char gender=sc.next().charAt(0);
switch分支结构
switch(表达式)//Java中只要是一个表达式就会有值返回
{
	case 常量1://..
	语句块1;
	break;
	case 常量2://..
	语句块1;
	break;

	case 常量n://..
	语句块1;
	break;
	default:
	default语句块;
	break;

在这里插入图片描述
如果没有break语句,就会直接执行语句块2,而不会进行判断(穿透),只要遇到一个break就会退出

表达式的数据类应该和case后面的常量类型一致,或者是可以自动转换成可以相互比较的类型
switch表达式的返回值必须是:byte,short,int,char,enum,String
case子句中的值必须是常量(或者常量表达式)不能是变量
default子句是可以选的,如果没有case匹配的语句,则执行default,如果没有default子句,又没有匹配任何常量,则没有输出
break语句用来在执行完应该case分支后,使程序跳出switch语句块,如果没有break,程序就会顺序执行到switch结尾,除非遇到一个break

练习:

1.用switch-case实现成绩判定:
在这里插入图片描述
2.用switch-case实现月份划分季节
使用case穿透现象实现:

int month=myScanner.nextInt();
swithc(month)
{
	case 3:
	case 4:
	case 5:
		System.out.println("这是春季");
		break;
	case 6:
	case 7:
	case 8:
		System.out.println("这是春夏季");
		break;
	case 9:
	case 10:
	case 11:
		System.out.println("这是秋季");
		break;
	case 12:
	case 1:
	case 2:
		System.out.println("这是冬季");
		break;
	defaultSystem.out.println("输入格式错误");
		
switch与if的比较:

1.如果判断的具体数值不多,而且符合byte,short,int,char,enum,String这6种类型,虽然两个语句都可以使用,建议使用switch语句
2.其他情况:对于区间判断,对结果为boolean类型判断,使用if,if使用范围更广

循环控制

for循环
for(循环变量初始化;循环条件;循环变量迭代){
	循环操作语句;
}

关键:循环变量初始化,循环条件,循环操作,循环变量迭代
循环流程控制图:
在这里插入图片描述
注意:
1.循环条件是返回应该布尔值的表达式
2.for循环的初始条件初始化和迭代可以写到其他地方,但是括号()中的;;不能省略
3. 没有循环判断条件则为无限循环即for(;;)(CTRL+C结束死循环)
4. 4.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条迭代语句中间用逗号隔开
5. 编程核心:化繁为简,先死后活,实现代码的可移植性

while循环
循环变量初始化
while(循环条件){
	循环体语句
	循环变量迭代
}

while循环流程图
在这里插入图片描述
while循环结束后的代码还会继续执行
循环条件是返回一个布尔值的表达式
while循环是先判断再执行语句

do-while循环
循环变量初始化
do{
	循环体语句
	循环变量迭代
}while(循环条件);

do-while是先执行后判断,一定会至少执行一次

do-while循环流程图
在这里插入图片描述
循环条件是返回一个布尔值的表达式
do-while是先执行后判断

实例:

在这里插入图片描述

多重循环

嵌套循环(一般建议两次)
循环执行次数:外层m次,内层,最终内层语句执行次数为m*n次
嵌套循环就是把内层循环当作外层循环的循环体,只有内层循环条件为false时才结束内层循环,结束外层当次循环,开始外层下一次循环

示例:空心金字塔

public class Stars{
	public static void main(String[] args){
	int totalLevel=5;
	for(int i=1;i<=totalLevel;i++){
		for(int k=1;k<=totalLevel-i;k++){
			System.out.print(" ");
		}
		for(int j=1;j<=2*i-1;j++){
			if(j==1||j==2*i-1||i==totalLevel){
			System.out.print("*");
			}else{
			System.out.print(" ");
			}
		}
		System.out.print("\n");
	}
}	
}

化繁为简,先死后活很重要

跳转控制语句break

随机生成语句

(int)(Math.random()*100)+1
//Math.random随机返回带正号的double数,大于等于0.0,小于1.0

当某个条件满足时,终止循环,通过该需求说明其他流程控制的必要性
基本语法:

{
...
break;
...
}

while为例的循环示意图
在这里插入图片描述
break语句出现在多层嵌套语句块中时,可以通过标签指明要终止的是哪一层语句块,但是实际开发中尽量不要使用标签
如果没有指定默认break,默认退出最近的循环体
break后指定到哪个label就退出到哪里
标签名字由程序员指定

label1:
	for(){
	label2:
		for(){
			if(){
				break;
			}
			System.out.println("");
		}
	}
//break后面什么都没有,等价于break label2,结束内层for循环
//break label1,直接结束外层for循环	

实例:
String内容比较,一般选择第二种,可以避免空指针
在这里插入图片描述

Scanner myScanner=new Scanner(system.in);
String name="";
String passwd="";
int chance=3;
for(int i=0;i<3;i++){
	name=myScanner.next();
	passwd=myScanner.next();
	if("aa".equals(name)&&"666".equals(passwd)){
		System.out.println("true");
		break;
	}
	System.out.println("false and 剩余机会:"+chance);
}
跳转控制语句continue

continue语句用于结束本次循环,继续执行下一次循环
continue语句出现在多层嵌套循环语句体中是,可以通过标签指明要跳过的是哪一层循环
基本语法:

{
...
continue;
...
}

while为例的循环示意图:
在这里插入图片描述
跳过其他语句块,也就是这一次循环剩下的所有语句都跳过
在这里插入图片描述

continue后面没有带标签等价于continue label2,跳过该层当前次循环,进入内层for循环的下一次
continue label1 跳过外层for循环的当次执行语句块,进入外层for循环的下一次

跳转控制语句return

return用于跳出所在方法
如果return用在main方法,代表退出程序

总结实例

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值