第四章 流程控制

一.复合语句

C语言及其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。复合语句由开括号“ { ” 开始,闭括号 “ } ”结束。

复合语句中的每个语句都是从上到下被执行,复合语句以整个块为单位,能够用在任何一个单独语句可以使用的地方,并且在复合语句中还可以嵌套复合语句

例如,下面这段代码,在主方法中定义了复合语句块,复合语句块中还可以包含另一语句块。

在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。例如,在上述代码中,如果在复合语句外使用变量y、z、b将会出现错误,儿变量x可在整个方法体中使用。 

二.条件语句

1.if条件语句

if条件语句是一个重要的编程语句,用于告诉程序在某个条件成立的情况下执行某段语句,而在另一种情况下执行另外的语句。

使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”如果该表达式返回的结果为true,则执行其后的语句:如果为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if…else语句和if…else if多分支语句。

1.简单的if条件语句

语法如下:

if(布尔表达式){
      语句序列
}

简单的if条件语句的执行过程如图所示。

例1,判断手机号码是否存在。

创建Takephone类,模拟拨打电话场景,如果电话号码不是84972266,则提示拨打的号码不存在。

代码:

public class Takephone {   //创建类
   public static void main(String[] args) {//主方法
	   int phoneNumber = 123456789;//创建变量,保存电话号码
	   if (phoneNumber!=84972266) {//如果此电话号码不是84972266
		   System.out.println("对不起,您拨打的电话不存在!");//提示号码不存在
	   }
		
 
	}
 
}

运行结果:

流程图:

 2.if…else语句

if…else语句是条件语句中最常用的一种形式,它会针对某种条件有选择地做出处理。通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”。语法如下:

if(条件表达式){
     语句序列1
}else{
     语句序列2
}

 例2,使用if…else语句校验密码

在项目中创建Login类,在主方法中定义变量,并通过if…else语句判断变量地值来决定输出结果。

代码:

public class Login {//创建类
    public static void main(String[] args) {//主方法
    	int password = 987654321;//密码值
    	if(123456789 == password) {//如果密码是123456789
    		System.out.println("密码正确,欢迎登录");//密码正确提示
    	}else {//否则
    		System.out.println("密码错误,拒绝登录");//密码错误提示
    	}
    }
}

运行结果:

流程图:

 3.if…else if多分支语句

if…else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件,就进行某种处理,否则如果满足另一种条件则执行另一种处理。”语法如下:

if(条件表达式1){
      语句序列1
}else if(条件表达式2){
      语句序列2
}
…
else if(条件表达式n){
      语句序列n
}

 例3,使用if…else if语句实现饭店座位分配

创建Restaurant类,声明整型变量count表示用餐人数,根据人数安排客人到4人桌、8人桌或包厢。

代码:

public final class Restaurant {//创建类
   public static void main(String[] args) {//主方法
	   System.out.println("欢迎光临,请问有多少人用餐?");//输入问题提示
	   int count = 9;//用餐人数
	   System.out.println("回答:"+count+"人");//输出回答
	   if(count <=4) {//如果人数小于四人
		   System.out.println("客人请到大厅4人桌用餐");//请到4人桌
	   }else if(count>4 && count<=8) {//如果人数在4~8人
		   System.out.println("客人请到大厅8人桌用餐");//请到8人桌
	   }else if(count>8 && count<=16) {//如果人数在8~16人
		   System.out.println("客人请到楼上包厢用餐");//请到楼上包厢
	   }else {//当以上条件都不成立,执行该语句块
		   System.out.println("抱歉,我们店暂时没有这么大的包厢");//输出信息
		   
		   
	   }
   }
}

运行结果:

流程图:

 2. switch多分支语句 

在编程中,一个常见的问题就是检测变量是否符合某个条件,如果不符合,再用另一个值来检测。

例如,使用if语句对考试成绩进行评估,关键代码如下:

if(grade =='A'){
      Systeem.out.println("真棒");
}
if(gread =='B'){
      System.out.println("做得不错");
}

 在Java中,可以用switch语句将动作组织起来,以一个简单明了得方式来实现“多选一”得选择。语法如下:

switch(表达式){
case 常量值1:
     语句块1
     [break;]
…
case 常量值n;
     语句块n
     [break;]
default:
     语句块n+1;
     [break;]
}

switch语句中表达式的值必须是整型字符型字符串类型枚举类型,常量值1~n的数据类型必须与表达式的值的类型相同。

switch语句首先计算表达式的值,如果表达式的计算结果和某个case后面的常量值相同,则执行该case语句后的若干个语句直到遇到break语句为止。此时,如果该case语句中没有break语句,将继续执行后面case中的若干个语句,直到遇到break语句为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句为可选的,如果它不存在,且switch语句中的表达式的值不与任何case的常量值相同,switch语句则不做任何处理。

例4,使用switch语句为考试分数分级

创建Grade类,使用Scanner类在控制台输入分数,然后switch多分支语句判断输入的分数属于哪类成绩。10分和9分属于优,8分属于良,7分和6分属于中,5分、4分、3分、2分、1分以及0分均属于差。

代码:

import java.util.Scanner;//引入Scanner类
public class Grade {//创建类
  public static void main(String[] args) {//主方法
	  Scanner sc = new Scanner(System.in);//创建扫描器,接收控制台输入内容
	  System.out.println("请输入成绩");//输出字符串
	  int grade = sc.nextInt();//获取控制台输入的数字
	  switch(grade) {//使用switch判断数字
	  case 10://如果等于10,则继续执行下一行代码
	  case 9://如果等于9
		  System.out.println("成绩为优");//输出“成绩优先”
		  break;//结束判断
	  case 8://如果等于8
		  System.out.println("成绩为良");//输出“成绩为良”
		  break;//结束判断
	  case 7://如果等于7,则继续执行下一行代码
	  case 6://如果等于6
		  System.out.println("成绩为中");//输出“成绩为中”
		  break;//结束判断
	  case 5://如果等于5,则继续执行下一行代码
	  case 4://如果等于4,则继续执行下一行代码
	  case 3://如果等于3,则继续执行下一行代码
	  case 2://如果等于2,则继续执行下一行代码
	  case 1://如果等于1,则继续执行下一行代码
	  case 0://如果等于0
		  System.out.println("成绩为差");//输出“成绩为差”
		  break;//结束判断
		  default://如果不符合以上任何一个结果
			  System.out.println("成绩无效");//输出“成绩无效”
	    }
	  sc.close();//关闭扫描器
	}
 
}

运行结果:

 流程图:

 三.循环语句

1. while 循环语句

while 语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句。语法如下:

while(条件表达式){
     语句序列
}

 例5,计算1~1000的相加结果

创建GetSum类,在主方法中通过while循环计算1~1000相加的和并输出。

代码:

public class GetSum {//创建类
	public static void main(String[] args) {//主方法
		int x = 1;//从1开始
		int sum = 0;//相加的结果
		while(x<=1000) {//循环1000次
			sum = sum+x;//sum与之前计算的和相加
			x++;//每次循环后x的值+1
		}
		System.out.println("sum="+sum);//输出最终的相加结果
	}
}

运行结果:

 流程图:

2. do…while循环语句

do…while循环语句与while循环语句类似,它们之间的区别是while语句为先判断是否成立再执行循环体,而do…while循环语句则先执行一次循环后,再判断条件是否成立。也就是说,do…while循环语句“ { } ”中的程序至少要被执行一次。语法如下:

do{
   语句序列
}while(条件表达式);

例6,使用do…while语句进行用户登录验证

创建LoginService类,首先提示用户输入6位密码,然后使用Scanner扫描器获取用户输入的密码,最后进入do…while循环进行判断,如果用户输入的密码不是“931567”,则让用户反复输入,直到输入正确密码为止。

代码:

import java.util.Scanner;//引入scanner类
public final class LoginService {//创建类
	public static void main(String[] args) {//主方法
		Scanner sc =new Scanner(System.in);//创建扫描器,获取控制台输入的值
		int password;//保存用户输入的密码
		do {
			System.out.println("请输入6位数字密码:");//输入提示
			password = sc.nextInt();//将用户在控制台输入的密码记录下来
		}while(931567 != password);//如果用户输入的密码不是931567则进行执行循环
		System.out.println("登陆成功");//提示循环已结束
		sc.close();//关闭扫描器
	}
}

 运行结果:

 流程图:

3. for循环语句

for循环是Java程序设计中最有用的循环之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。for循环有两种语句,一种是传统的for语句,一种是foreach语句。

1、for语句

for的传统语句有三个表达式,语法如下:

for(表达式1;表达式2;表达式3){
     语句序列
}

表达式1:初始化表达式,负责完成变量的初始化。

表达式2:循环条件表达式,值Boolean型的表达式,指定循环条件。等同于while循环里的表达式。

表达式3:每次循环结束后执行的语句,通常用来改变循环条件。

例7,使用for循环计算2~100所有偶数之和

创建Circulate类,编写程序,使用for循环语句计算2~100所有偶数的和并输出。

代码:

public class Circulate {//创建类
	public static void main(String[] args) {//主方法
		int sum = 0;//偶数相加后的结果
		for(int i =2;i<=100;i+=2) {
		sum = sum + i;//指定循环条件及循环体
		}
		System.out.println("2到100之间所有偶数之和为:"+sum);//将相加后的结果输出
	}
}

运行结果:

流程图:

  2.foreach语句

foreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以改写为for语句版本。foreach语句并不是一个关键字,习惯上将这种特殊的for语句格式称为foreach语句。语法如下:

for(元素类型x:遍历对象obj){
    引用了x的Java语句;
}

例8,使用foreach语句遍历整个数组

创建类Repetition,在主方法中定义一堆数组,并用foreach语句遍历该数组。

代码:

public class Repetition {//创建类
	public static void main(String[] args) {//主方法
		int arr[] = {5,13,96};//一维整型数组
		System.out.println("一维数组中的元素分别为:");
		//x的类型与arr元素的类型相同。for循环依此取出arr中的值并赋值给x
		for(int x:arr) {
			System.out.println(x);//输出遍历出的元素值
		}
	}
}

运行结果:

 流程图:

  四.循环控制

1.break语句

使用break语句可以跳出switch结构。在循环结构中,同样也可以用break语句跳出当前循环体,从而中断当前循环。

例9,输出1~20出现的第一个偶数

创建BreakTest类,循环输出1~20的偶数值,在遇到第一个偶数时,使用break语句结束循环。

代码:

public class BreakTest {//创建类
	public static void main(String[] args) {//主方法
		for(int i=1;i<20;i++) {
			if(i %2 ==0) {//如果i是偶数
				System.out.println(i);//输出i的值
				break;//结束循环
			}
		}
		System.out.println("--end--");//结束时输入一行文字
	}
}

运行结果:

流程图:

 如果想让break跳出外层循环,Java提供了“标签”的功能,语法如下:

标签名:循环体{
    break标签名;
}

 标签名:任意标识符。

循环体:任意循环语句。

break标签名:break跳出指定的循环体,此循环体的标签名必须与break的标签名一致。带有标签的break可以指定跳出循环,这个循环可以是内层循环,也可以是外层循环

例10,使用标签让break结束外层循环

创建BreakInsideNested类,在该类中写两层for循环,第一层for语句循环3次,第二层for语句循环5此。当第二层for循环至第四次时,强行使用break中断循环。输出程序执行时外层循环和内层循环各循环了多少次。

代码:

public class BreakInsideNested {//创建类
	public static void main(String[] args) {//主方法
		for(int i =1;i<=3;i++) {//外层循环
			for(int j=1;j<=5;j++) {//内层循环
				if(j==4) {//内层循环至第四次就结束
					break;
				}
				System.out.println("i="+i+"j="+j);
			}
		}
	}
 
}

运行结果:

  流程图:

2.continue语句

continue语句是针对break语句的补充。continue不是立即跳出循环体,而是跳过本次循环,回到循环的条件测试部分,重新开始执行循环。在for循环语句中遇到continue后,首先执行循环的增量部分,然后进行条件测试。在whiledo…while循环中,continue语句使控制直接回到条件测试部分。

例11,输出1~20的奇数

创建ContinueTeat类,编写一个for循环从1循环至20,如果当前循环的次数为偶数,则使用continue语句跳过循环。

代码:

public final class ContinueTeat {//创建类
	public static void main(String[] args) {//主方法
		for(int i=1;i<=20;i++) {
			if(i%2==0) {//如果i是偶数
				continue;//跳出下一循环
			}
			System.out.println(i);//输出i的值
		}
	}
 
}

运行结果:

 流程图:

 课堂作业

for循环内部嵌套一个while循环 

流程:

1
for{(2;3;4)
5
while(条件){
    6
        }
7
}
8

流程图:

 do...while循环内部嵌套一个for循环 

流程:

1
do{
   2
    for(3;4;5){
      6  
    }
   7
}while (条件)
8

流程图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值