Java流程控制详解 | 您所在的位置:网站首页 › java流程控制的实验心得 › Java流程控制详解 |
一、流程控制概述
在Java程序中,JVM默认总是顺序执行以分号;结束的语句。但是,在实际的代码中,程序经常需要做条件判断、循环,因此,需要有多种流程控制语句,来实现程序的跳转和循环等功能。 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即: 顺序结构 分支结构 循环结构 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 总的来说:程序按照从上到下的顺序执行。 Java顺序结构示例代码: public class Order { public static void main(String[] args) { System.out.println(1); System.out.println(2); System.out.println(3); } } 三、分支结构根据条件,选择性地执行某段代码。 有if…else和switch-case两种分支语句。 语法: if(条件表达式){ 语句块; } 解释: 条件表达式结果为boolean类型,当表达式结果为true,则执行语句块;否则什么都不执行! 当语句块只有一条执行语句时,一对{}可以省略,但建议保留。 Java if单分支示例代码: public class IfTest { public static void main(String[] args) { int a = 10; int b = 10; if(a > b){ System.out.println("a 大于 b"); } System.out.println("-------------"); if(a==b){ System.out.println("a 等于 b"); } } }练习题: 张浩Java成绩大于98分,而且音乐成绩大于80分,老师奖励他;或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他. public class Prize { public static void main(String[] args) { int score1 = 100; // 张浩的Java成绩 int score2 = 72; // 张浩的音乐成绩 if ( ( score1 >98&& score2 > 80 )|| ( score1 == 100 && score2 > 70 ) ){ System.out.println("老师说:不错,奖励一个MP4!"); } } } 3.2 if双分支语句语法: if(条件表达式){ 语句块A; }else{ 语句块B; } 解释: 条件表达式结果为boolean类型,当表达式结果为true,则执行语句块A;否则执行语句块B。 if-else语句结构,根据需要可以嵌套使用。 练习题: 如果张浩Java考试成绩大于98分,老师就奖励他一个MP4,否则老师就罚他进行编码。 public class SimpleIf { public static void main(String[] args) { int score = 91; // 张浩的Java成绩 if (score > 98) { System.out.println("老师说:不错,奖励一个MP4!"); } else { System.out.println("老师说:惩罚进行编码!"); } } } 3.3 if多分支语句语法: if(条件表达式A){ 语句块A; }else if(条件表达式B){ 语句块B; }... else if(条件表达式N){ 语句块N; }else{ 语句块N+1 } 解释: 所有的条件表达式结果都是boolean类型。 如果条件表达式A结果为true,则执行语句块A,否则去判断条件表达式B; 如果条件表达式B结果为true,则执行语句块B,否则去判断条件表达式C; .... 如果所有的条件表达式结果都为false,则执行语句块N+1 else是可选的,根据需要可以省略 注: 当多个条件是“互斥”关系(没有交集)时,条件判断语句及执行语句间顺序无所谓 当多个条件是“非互斥”关系(有交集)时,需要根据实际情况,考虑如何定义顺序。 当多个条件是“包含”关系时,“小上大下 / 子上父下” 为什么使用多重if选择结构? 问题:对学员的结业考试成绩评测 成绩大于等于90时,评估结果为:优秀 成绩为(80-89)时,评估结果为:良好 成绩为(60-79)时,评估结果为:中等 成绩小于60时,评估结果为:差 分析:将成绩分成几个连续区间判断。使用单个if选择结构无法完成,使用多个if选择结构很麻烦 ,所以要使用多重if选择结构。 int score = 70; //考试成绩 if ( score >= 90 ) { System.out.println("优秀"); } else if (score >= 80 ) { System.out.println("良好"); } else if (score >= 60 ) { System.out.println("中等"); } else { System.out.println("差"); }练习题: 我想买车,买什么车决定于我在银行有多少存款 如果我的存款超过500万,我就买凯迪拉克 否则,如果我的存款超过100万,我就买帕萨特 否则,如果我的存款超过50万,我就买依兰特 否则,如果我的存款超过10万,我就买奥托 否则,我买捷安特 请从键盘输入我的存款,并加以判断 需要Scanner类 1、导包,Scanner类在java.util.Scanner包下 2、实例化Scanner对象 3、调用Scanner类相关API,获取相应类型的变量 注:如果输入类型不匹配,会抛出异常! // 扫描器类 Scanner input = new Scanner(System.in); // 输入int类型的值 int money = input.nextInt(); // 我的存款,单位:万元 // 判断 if (money >= 500) { System.out.println("太好了,我可以买凯迪拉克"); } else if (money >= 100) { System.out.println("不错,我可以买辆帕萨特"); } else if (money >= 50) { System.out.println("我可以买辆依兰特"); } else if (money >= 10) { System.out.println("至少我可以买个奥托"); } else { System.out.println("看来,我只能买个捷安特了"); }练习题: 定义三个int型变量并赋值,使用三元运算符或者if-else获取这三个数中的较大数的实现 // 声明三个变量并赋值 int num1 = 10,num2 = 20,num3 = -5; // 声明max变量,根据判断赋值 int max; if(num1 >= num2 && num1 >= num3){ max = num1; }else if(num2 >= num1 && num2 >= num3){ max = num2; }else{ max = num3; }练习题: 编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人类的年龄。如果用户输入负数,请显示一个提示信息。 算法:狗的前两年每一年相当于人类的10.5岁,之后每增加一年就增加四岁。 int dogAge = 7; if(dogAge >= 0 && dogAge 2){ System.out.println("相当于人的年龄:" + (2 * 10.5 + (dogAge - 2) * 4)); }else{ System.out.println("狗狗还没出生呢!"); } 3.4 嵌套if为什么使用嵌套if? 问题:学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组。 分析: 要判断是否能够进入决赛。 在确定进入决赛的情况下,还要判断是进入男子组,还是进入女子组。 解决: 使用嵌套if选择结构 语法参考: if(条件1) { if(条件2) { 代码块1 } else { 代码块2 } } else { 代码块3 } 执行过程: ①-③-④-②-③-④-②-③-④-...② 解释: 先执行do对应的语句块,然后再判断循环条件,只要循环条件满足,则一直执行循环体,否则结束循环。 特点:先执行,再判断;do-while循环至少执行一次循环体。 语法: for( ①初始化循环条件; ②循环条件表达式 ; ④迭代部分 ){ ③循环操作(循环体); } 执行过程: ①-②-③-④-②-③-④-②-③-④-.....-② 解释: 1、先执行初始化循环条件 2、使用初始表达式值进行条件判断,如果判断为true,则执行循环操作;否则结束循环 3、进行迭代 4、循环迭代可以在()里面省略,在循环体里面进行迭代也可。 练习题: 循环输入某同学结业考试的5门课成绩,并计算平均分 1、分析循环条件和循环操作 2、套用for语法写出代码 3、检查循环是否能够退出 // 定义sum,用来存储叠加求和 int sum = 0; // 循环5次录入5门课成绩 for(int i = 0; i < 5; i++){ System.out.print("请输入5门功课中第" + (i+1) + "门课的成绩: "); score = input.nextInt(); //录入成绩 sum = sum + score; //计算成绩和 } // 计算平均分 avg = sum / 5; System.out.println(name + "的平均分是:" + avg);三种循环对比: 执行顺序 先判断,后执行: while 和 for 先执行,后判定: do-while 适用 循环次数确定: 一般使用for 循环次数不确定: 一般使用while 和 do-while 4.5 循环嵌套将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。 // 打印五颗星 ***** // System.out.println("*****"); for (int i = 1; i .... continue; .... }解释: continue只能使用在循环结构中 continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环 continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 public class ContinueTest { public static void main(String args[]) { for (int i = 0; i < 10; i++) { if (i == 3) continue; System.out.println(" i = " + i); } } }练习题: 循环录入Java课的学生成绩,统计分数大于等于80分的学生比例 1、通过循环,获得分数大于等于80分的学生人数num 2、判断:如果成绩 |
CopyRight 2018-2019 实验室设备网 版权所有 |