收藏 分销(赏)

流程控制模板.doc

上传人:w****g 文档编号:9297495 上传时间:2025-03-20 格式:DOC 页数:62 大小:167.50KB 下载积分:14 金币
下载 相关 举报
流程控制模板.doc_第1页
第1页 / 共62页
流程控制模板.doc_第2页
第2页 / 共62页


点击查看更多>>
资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 第四章 程序流程控制 一、 顺序结构和选择结构 任何一门编程语言都离不开流程控制, Java语言也不例外, 一般流程控制有三种结构: 顺序结构、 选择结构和循环结构。本节将主要介绍顺序结构和选择结构。 1.1  顺序语句 其实所有的编程语言, 发给计算机的命令都是按顺序一条条地执行的。比如生活中的取钱任务一般按六步操作顺序完成。这六步操作分别是: ①带上存折或银行卡去银行; ②取号排队; ③将存折或银行卡递给银行职员并告知取款数额; ④输入密码; ⑤银行职员办理取款事宜; ⑥拿到钱并离开银行。下面的程序SequentialStatement.java就是按顺序一步一步地完成取钱任务的。 public class SequentialStatement {     /**      * 顺序结构语句的示例      */     public static void main(String[] args) {         System.out.println("第1步: 带上存折或银行卡去银行");         System.out.println("第2步: 取号排队");         System.out.println("第3步: 将存折或银行卡递给银行职员并告知取款数额");         System.out.println("第4步: 输入密码");         System.out.println("第5步: 银行职员办理取款事宜");         System.out.println("第6步: 拿到钱并离开银行");     } } 上面的代码就是根据一定的顺序从main方法的{(左括号)开始到}(右括号)结束, 来一行行地发送命令给计算机完成取钱的任务。 1.2  选择条件语句 if条件语句是根据条件判断之后再做处理, if分支结构主要有以下几种。 l   if(条件语句){…}。 l   if (条件语句){…}else{…}。 l   if (条件语句){…}else if(条件语句){…}else{…}。 l   嵌套if条件结构。 1. if结构 1. if结构   If(boolean类型表示式)        语句A;   功能: 当表示式值为true时, 执行语句A, 否则跳过语句A。   流程图如图3.5所示。 图1.5  单条件IF结构流程图 生活中有这样类似的问题, 如果我中了500万, 我就买车、 买房、 娶媳妇, 那么经过Java程序如何处理这样的呢? 下面的程序If.java是经过if结构来处理上述问题的。 import java.util.*;  //*表示所有, 它包含import java.util.Scanner public class If{     public static void main(String[] args) {         int jiangjin=500;     //规定的奖金数目是500万         Scanner input=new Scanner(System.in);         System.out.println("请您输入奖金猜是否与规定的数目符合: ");         int in=input.nextInt();         //条件结构         if(in==jiangjin){              System.out.println("恭喜您中500万! ");              System.out.println("买车");              System.out.println("买房");              System.out.println("娶媳妇");         }     } } 输出结果为: 请您输入奖金猜是否与规定的数目符合: 500 恭喜您中500万! 买车 买房 娶媳妇 2. if…else结构   If(boolean类型表示式)        语句A;   else        语句B;   功能: 当表示式值为true时, 执行语句A; 当表示式值为false时, 执行语句B。   流程图如图3.6所示。 图1.6  双重条件IF结构流程图 如果没有中500万, 那么又如何处理呢? 能够经过if…else结构进行处理。程序IfElse.java就是如果我们没有中奖的处理方式。 import java.util.Scanner; public class IfElse {     public static void main(String[] args) {         int jiangjin=500;     //规定的奖金数目是500万         Scanner input=new Scanner(System.in);         System.out.println("请您输入奖金猜是否与规定的数目符合: ");         int in=input.nextInt();         //条件结构         if(in==jiangjin){              System.out.println("恭喜您中500万! ");              System.out.println("买车");              System.out.println("买房");              System.out.println("娶媳妇");         }else{             System.out.println("谢谢惠顾! ");             System.out.println("您得继续吃方便面");             System.out.println("革命尚未成功, 同志仍需努力! ! ! ");         }     } } 输出结果为: 请您输入奖金猜是否与规定的数目符合: 400 谢谢惠顾! 您得继续吃方便面 革命尚未成功, 同志仍需努力! ! ! 3. 多重if结构 if (boolean类型表示式) {      //语句 A } 能够有多个   else if (boolean类型表示式) {      //语句 B } 能够省略   else {      //语句 C } 功能: 当表示式值为true时, 执行语句A; 在else部分再判断其它表示式的值, 如果均不符合, 则是执行语句C。 流程图如图3.7所示。 图1.7  多重条件IF结构流程图 在学生时代, 父母为了激励孩子努力学习, 一般会对孩子讲”如果你考了什么分数, 我将给你一个什么奖励…”。小明的父母也是这么给她一个期许的。如果把生活中的这种情形用程序来演绎, 前面两种做法显然是解决不了的, 要处理这样的问题就需要用多重if结构。 程序IfElseIfTest.java能够实现此类分级评级, 代码如下: import java.util.*; public class IfElseIfTest {     /**      * 输入小明的考试成绩, 显示所获奖励      * 成绩==100分, 爸爸给她买辆车      * 成绩>=90分, 妈妈给她买MP4      * 90分>成绩>=60分, 妈妈给她买本参考书      * 成绩<60分, 什么都不买      */     public static void main(String[] args) {         Scanner input=new Scanner(System.in);         System.out.println("请您输入小明的考试成绩: ");         int chengji=input.nextInt();         if(chengji==100){             System.out.println("爸爸给她买辆车");         }else if(chengji>=90&&chengji<100){             System.out.println("妈妈给她买MP4");         }else if(chengji>=60&&chengji<90){             System.out.println("妈妈给她买本参考书");         }else if(chengji<60){             System.out.println("什么都不买");         }     } } 输出结果为: 请您输入小明的考试成绩: 67 妈妈给她买本参考书 4. 嵌套if结构 if (boolean类型表示式) {      if(boolean类型表示式){ //语句 A       }else{   //语句 B } }else if (boolean类型表示式){   if(boolean类型表示式){ //语句 C       }else{   //语句 D } }else{ } 功能: 当表示式值为true时, 进入执行语句A; 在else部分再判断其它表示式的值, 如果均不符合, 则是执行语句C。 流程图如图3.8所示。 图1.8  嵌套if结构图 小朱的男朋友答应她, 如果她发了的奖金高于 块, 就出去庆祝一下( 如果周末天气好, 就去郊游, 否则就带她去商场买购物) ; 如果只发的奖金高于1000元, 就简单表示一下( 天气好就去公园转转, 否则就去书店看书) ; 如果发的奖金低于1000元, 则就呆在家里看电视。要处理这个语句就需要用到嵌套if语句。程序NestIFDemo.java能够实现小朱男友的计划, 代码如下: import java.util.Scanner; public class NestIFDemo {     public static void main(String[] args) {         Scanner input = new Scanner(System.in);         System.out.println("请输入奖金数目( 整数) ");         int bonus =input.nextInt();         System.out.println("请输入天气状况(1代表好, 0代表差)");         int datenum =input.nextInt();                   boolean flag = (datenum==1?true:false);         if (bonus > ) {             if (flag) {                 System.out.println("我们去郊游");             } else {                 System.out.println("我们去购物");             }         } else if (bonus > 1000) {             if (flag) {                 System.out.println("我们去公园");             } else {                 System.out.println("我们去书店");             }         } else {             System.out.println("在家看电视");         }     } } 输出结果为: 请输入奖金数目( 整数) 3000 请输入天气状况(1代表好, 0代表差) 0 我们去购物 . if与else的配对 了解几种常见的条件语句用法之后, 请读者朋友想一想, 如果有多个不带else子句的if, 会是怎么一个结果呢? 【示例4】IfelseIfTest2.java 比如, 提供1至9个数据, 判断数据是奇数还是偶数, 然后对其分别求和, 最后显示出奇数和偶数的和。 public class IfelseIfTest2{     public static void main(String[] args) {         int oddsum = 0;         int bothsum = 0;         if (args.length>1) {             for (int i = 0; i < 10; i++)                 if (i % 2 != 0)                     oddsum += i;         else             bothsum += i;         }         System.out.println("奇数的和为: " + oddsum + " 偶数的和为: " + bothsum);     } } 上面的else看起来与数组长度的判断绑定在一块儿了, 但这只是缩进造成的假象, 在这里这个缩进应该被忽略掉。实际上它应该和是否被2整除的条件相互绑定的。上面main方法的代码实际上应该为:     public static void main(String[] args) {         int oddsum = 0;         int bothsum = 0;         if (args.length>1) {             for (int i = 0; i < 10; i++)                 if (i % 2 != 0)                     oddsum += i;                 else                     bothsum += i;         }         System.out.println("奇数的和为: " + oddsum + " 偶数的和为: " + bothsum);     } else子句应该和离它最近的那个没有else子句的if语句绑定。 1.3  switch结构 除了多重if结构外, Java语言中还有一类多分支选择结构, 如有下面一个问题要经过多分支选择结构来解决。 问题描述: 令狐冲参加比武大会, 如果获得第一名, 将出任武林盟主; 如果获得第二名, 将出任武当掌门; 如果获得第三名, 将出任峨嵋掌门; 否则, 将被逐出师门。 上面的问题能够经过多重if结构实现, 但Java语言中提供了更好的解决此类问题的方法——switch结构。 1. 什么是switch结构 switch结构也是一种类似于处理多分支选择的一种程序结构。 switch(表示式){ //计算表示式 case 取值1: 语句块1; break;  //如果表示式的值等于常量1, 则执行语句块1 case 取值n: 语句块n; break;  //如果表示式的值等于常量n, 则执行语句块n default: 语句块n+1; break;   //如果前面的常量都不等于, 则执行default语句块 } switch结构有如下规则。 (1) 表示式的返回值必须是下述几种类型之一: char、 byte、 short、 int, 而且必须是确定的结果。 (2) case子句中的取值必须是常量, 且所有case子句中的取值应该是不同的。 (3) default子句是可选的。 (4) break语句用来在执行完一个case分支后, 使程序跳出switch语句块; 如果case后面没有写break, 则直接往下面执行。 (5) case后面的执行体可写{ }, 也能够不写。 switch表示式必须是整数类型( char、 byte、 short、 int或它们对应的包装器类) 或者枚举类型。在后面的章节中会再作阐述。 2. 如何使用switch结构 下面经过switch结构来描述令狐冲比武的结果。 【示例6】SwitchTestPro.java 解决比武大会问题。 public class SwitchTestPro {  public static void main(String args[]){        int mingCi = 1;        switch (mingCi){                    case 1:                        System.out.println("出任武林盟主");                        break;                    case 2:                        System.out.println("出任武当掌门");                        break;                    case 3:                        System.out.println("出任峨嵋掌门");                        break;                    default:                        System.out.println("被逐出师门");        }  } } 输出结果为: 出任武林盟主 把类型改为char, 经过上例来测试switch块对char类型的支持。 public class SwitchTestPro {  public static void main(String args[]){        char mingCi = ‘a’;        switch (mingCi){                    case ‘a’:                        System.out.println("出任武林盟主");                        break;                    case ‘b’:                        System.out.println("出任武当掌门");                        break;                    case ‘c’:                        System.out.println("出任峨嵋掌门");                        break;                    default:                        System.out.println("被逐出师门");        }  } } 因为字符能够直接向int转型, 所又上述代码是完全正确的。 case或default标号不会让控制流跳出switch, 它们也没有暗含要结束语句执行的意思。如果要在switch块中结束语句的执行, 必须显式地将控制流转出switch块。前面是经过break来做到这一点的。当然使用return语句也能够实现退出switch块的效果。 【示例7】SwitchTest.java 如果要想设计一个一星期的减肥计划, 能够经过switch结构来实现, 下面代码就是一个很好的示例。 import java.util.Scanner; /**  * 下面是一个膳食减肥计划  */ public class SwitchTest {     public static void main(String[] args) {         //用switch结构来实现一个减肥计划         System.out.println("请您输入星期数字: ");         Scanner input=new Scanner(System.in);         int num=input.nextInt();         switch(num){           case 1:               {                 System.out.println("小白菜");                 return;               }           case 2:               System.out.println("大白菜");               return;           case 3:               System.out.println("方便面");               return;           case 4:               System.out.println("猪肉");               return;           case 5:               System.out.println("牛肉");               return;           case 6:               System.out.println("燕窝!鲍鱼");               break;           default:               System.out.println("什么也不吃");               return;         }     } } return语句会终止一个方法的执行并返回它的调用者。如果方法不需要返回值, 使用简单的return语句即可。如果方法有返回类型, 则return语句必须包括属于某种类型的表示式, 这种类型能够赋值给返回类型。 输出结果为: 请您输入星期数字: 6 燕窝!鲍鱼 在某些环境下, 还需要实现多种情况下执行同一个动作的效果, 亦即多个case标号对应一条语句。 【示例8】SwitchTest1.java 比如遇上经济危机, 要节省过日子, 对上面的减把计划进行修改, 代码如下所示。 import java.util.Scanner; /**  * 下面是一个膳食减肥计划  */ public class SwitchTest1 {     public static void main(String[] args) {         //用switch结构来实现一个减肥计划         System.out.println("请您输入星期数字: ");         Scanner input=new Scanner(System.in);         int num=input.nextInt();         switch(num){ case 1:case 2:                 System.out.println("小白菜");                 break;           case 3:case 4:               System.out.println("方便面");               break;           case 5:case 6:               System.out.println("牛肉");               break;               default:               System.out.println("什么也不吃");               break;         }     } } 输出结果: 请您输入星期数字: 6 牛肉 switch语句中最多只能有一个default标号。 1.4  经验之谈——switch结构常见错误的分析与处理 编程初学者使用switch结构时经常会出现的一些错误, 下面将常见的一些错误提出来供读者参考。 常见错误1: 缺少break语句 错误代码片段如下: int mingCi = 1; switch (mingCi){ case 1:     System.out.println("出任武林盟主"); case 2:     System.out.println("出任武当掌门"); case 3:     System.out.println("出任峨嵋掌门"); default:     System.out.println("被逐出师门"); } 输出结果为: 出任武林盟主 出任武当掌门 出任峨嵋掌门 被逐出师门 错误分析: 在switch结构中, 每一个case语句块后面如果不写break语句, switch就会直接往下面的case语句块运行, 直到遇到break语句为止。上面的代码应该在每个case语句后面都加上break语句。 常见错误2: case语句后面常量相同 错误代码片段如下: int mingCi = 1; switch (mingCi){ case 1:     System.out.println("出任武林盟主"); case 2:     System.out.println("出任武当掌门"); case 2: // 代码错误, case语句后面的常量值不能相同     System.out.println("出任峨嵋掌门"); default:     System.out.println("被逐出师门"); } 上面的代码有两个case2, 当计算机选择分支的时候不能判定是哪一个, 因而要将它们后面的常量改成不重复的数。 常见错误3: case语句后接常量错误 错误代码片段如下: String day = "星期一"; switch (day){ case "星期一":     System.out.println("星期一: 青菜  ");     break; case "星期二":     System.out.println("星期二: 鱼  ");     break; default: } 上面代码中, case语句后面接的常量值只能是byte、 short、 int、 char类型的值, 不能是其它类型的值。 1.5  switch和多重if结构比较 switch和多重if结构有很多相同之处, 也有不同之处。 (1) 相同点: 都能够实现多分支结构。 (2) 不同点: switch结构只能处理等值的条件判断, 且条件是整型变量或字符变量的等值判断, 一般适合分支多于5个以上的情况; 多重if结构特别适合某个变量处于某个区间时的情况, 如a>60&&a<=80。 二、 循环语句 循 环 语 句 循环语句的功能是在循环条件满足的情况下, 重复执行特定代码。循环语句分类主要有while循环、 do…while循环和for循环三类。 Java中循环结构需满足以下三个条件。 l   要初始化循环变量, 如int i=0。 l   要有判断循环体是否结束的条件表示式, 如: i<=100。 l   要有改变判断条件表示式值的语句, 如: ”i++;”。 读者只要记住这三个条件的三个关键字, 理解并学会运用, 循环语句就很容易掌握了。这三个关键字是”初”、 ”判”、 ”变”, 分别对应上面的三个条件。 1. 为什么需要循环 如果有这样一个问题需要经过程序来解决, 有一天你的女朋友要你对她说一百遍”我喜欢你”, 如果按照以往的程序只能在main方法中写入下面的代码片段。 System.out.println("我喜欢你"); System.out.println("我喜欢你"); System.out.println("我喜欢你"); System.out.println("我喜欢你"); System.out.println("我喜欢你"); System.out.println("我喜欢你"); System.out.println("我喜欢你"); 这样写一百遍是很麻烦的事情。 2. 什么是循环 生活中的循环有很多, 如图3.9所示。 生活中的循环一般是经过循环条件来执行循环操作的。例如打印机打印50份试卷就是循环条件。Java语言是怎么处理循环这样的问题的呢? 下面将做详细讲解。   (a) 打印50份试卷          (b) 10000米赛跑  (c) 旋转的车轮 图3.9  生活中的循环 2.1  while循环 1. 什么是while循环 while即当……的时候, 也就是当满足条件时就循环执行指定的代码。 2. while循环的语法 while (expression) {    语句; } 其中expression也只能是boolean或Boolean类型的, 它的值将首先被计算机出来, 若值为true, 则执行其后面的语句, 一旦语句执行完毕, expression的值将会被重新计算, 如果还是为true, 语句将会再次执行, 这样一直重复下去, 直至expression的值为false为止。 下面的程序While.java经过while循环解决了说一百遍”我喜欢你”的问题。代码如下: public class While{     /**      * 经过while循环来解决你女朋友要你对她说一百遍"我喜欢你"      */     public static void main(String[] args) {         int i=1;//1.初始化         while (i <= 100) {// 2.判断条件             System.out.println("我喜欢你我已经说了" + i + "遍");             i++;// 3.更改变量值         }     } } 输出结果为: 我喜欢你我已经说了1遍 我喜欢你我已经说了2遍 我喜欢你我已经说了3遍 我喜欢你我已经说了4遍 我喜欢你我已经说了5遍 我喜欢你我已经说了6遍 我喜欢你我已经说了7遍 我喜欢你我已经说了8遍 我喜欢你我已经说了9遍 …… 我喜欢你我已经说了100遍 while循环的特点是: 先判断, 再执行。其具体执行流程如图3.10所示。 图1.10  while循环的流程图 3. 怎么使用while循环 简单的while循环用法就如上例所示, 经过变量的自增或自减来更新值。其实循环条件除了预先设定之外, 还能够由输入者自行控制, 从而形成良好的人机互动效果。 【示例13】WhileTest2.java Java编程要经常练习才能获得较好的学习效果。下面是老师监督学生加强编程练习, 学生经过询问老师, 老师看结果后判断学生练习好了没有。这也是循环的一种方式。 import java.util.*; public class WhileTest2 {     /**      * 老师要学生加强练习, 经过询问老师, 让老师看结果后判断练习好了没有。      */     public static void main(String[] args) {         Scanner input = new Scanner(System.in);         System.out.println("老师, 我练得怎么样? Y/N");         String result;         result = input.next();// 由老师来输入Y(Yes)或N(No) //1.初始化变量         while (!result.equalsIgnoreCase("Y")) {// 2.判断变量             System.out.println("继续练程序");             System.out.println("老师, 我练得怎么样? 您回答一下: Y/N");             result = input.next();// 3.更新变量值         }         System.out.println("练习结束! ");     } } String字符串对象的equalsIgnoreCase方法表示忽略比较对象的大小写。有关String的相关用法在后面的章节有详细的讲解。 输出结果为: 老师, 我练得怎么样? Y/N N 继续练程序 老师, 我练得怎么样? 您回答一下: Y/N N 继续练程序 老师, 我练得怎么样? 您回答一下: Y/N Y 练习结束! 2.2  经验之谈——while循环的常见错误 常见错误1: 缺少改变循环体判断条件表示式值的语句 错误代码片段如下: public class Test {     /* 打印4次"欢迎----学员" */     public static void main(String [ ] args){         int i  = 0;         while (i < 4 ){                System.out.println("欢迎----学员");          }     } } 永远输出: 欢迎----学员 欢迎----学员 欢迎----学员 欢迎----学员 欢迎----学员 M 上面代码将形成死循环, 应该在while执行体中加入改变判断条件表示式值的语句, 如”i++;”。 永远都不会退出的循环称为死循环。如果不小心形成了死循环, 请用”CTRL+C”退出。 常见错误2: 丢失等号 错误代码片段如下: public class Test1 {     /*  打印4次"欢迎----学员" */     public static void main(String [ ] args){         int i= 1;         while (i < 4){// 题意要求循环4次, 判断表示式只循环3次, 应该改为i<=4    
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服