流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块。 • 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即: 顺序结构 分支结构 循环结构
顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转。 分支结构 根据条件,选择性地执行某段代码。 有if…else和switch-case两种分支语句。 循环结构 根据循环条件,重复性的执行某段代码。 有while、do…while、for三种循环语句。 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素 顺序结构 Java中定义成员变量时采用合法的前向引用。如: public class Test{ int num1 = 12; int num2 = num1 + 2; } 错误形式: public class Test{ int num2 = num1 + 2; int num1 = 12; } 执行语句1 执行语句2 执行语句n … … 2.5.1 程序流程控制:顺序结构 2-5-2 分支语句1: if-else结构 if语句三种格式:
if(条件表达式){ 执行代码块; }if(条件表达式){ 执行代码块1; } else{ 执行代码块2; } 条件表达式 执行代码块 true false 条件表达式 执行代码块1 执行代码块2 true false 2.5.2 程序流程控制:if-else结构if(条件表达式1){ 执行代码块1; } else if (条件表达式2){ 执行代码块2; } …… else{ 执行代码块n; } 条件表达式1 执行代码块1 true 条件表达式2 执行代码块2 true false false … … 执行代码块n false 2.5.2 程序流程控制:if-else结构 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量 语句块只有一条执行语句时,一对{}可以省略,但建议保留 if-else语句结构,根据需要可以嵌套使用 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓 当多个条件是“包含”关系时,“小上大下 / 子上父下” 2.5.2 程序流程控制:if-else结构 分支结构:if-else使用说明 if-else语句应用举例 public class AgeTest{ public static void main(String args[]){ int age = 75; if (age< 0) { System.out.println(“不可能!”); } else if (age>250) { System.out.println(“是个妖怪!”); } else { System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!"); } } }/* 岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断
说明:
else 结构是可选的。
针对于条件表达式:
如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。 */
import java.util.Scanner; class IfTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in);
System.out.println("请输入岳小鹏期末成绩:(0-100)"); int score = scan.nextInt(); if(score == 100){ System.out.println("奖励一辆BMW");//be my wife! BMW <---> MSN }else if(score > 80 && score <= 99){ System.out.println("奖励一台iphone xs max"); }else if(score >= 60 && score <= 80){ System.out.println("奖励一个 iPad"); }else{ System.out.println("什么奖励也没有"); }}
}
/* 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
说明:
if-else结构是可以相互嵌套的。
如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。 */ import java.util.Scanner; class IfTest2 { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println(“请输入第一个整数:”); int num1 = scanner.nextInt(); System.out.println(“请输入第二个整数:”); int num2 = scanner.nextInt(); System.out.println(“请输入第三个整数:”); int num3 = scanner.nextInt();
if(num1 >= num2) //1>2 if(num3 >= num1)//2 1 3 System.out.println(num2 + “,” + num1 + “,” + num3); else if(num3 <= num2) //321 System.out.println(num3 + “,” + num2 + “,” + num1); else System.out.println(num2 + “,” + num3 + “,” + num1);//231
}else{ if(num3 >= num2)//123 System.out.println(num1 + “,” + num2 + “,” + num3); else if(num3 <= num1)//312 System.out.println(num3 + “,” + num1 + “,” + num2); else System.out.println(num1 + “,” + num3 + “,” + num2);//
}
} }
class IfExer { public static void main(String[] args) { int x = 4; int y = 1; if (x > 2) if (y > 2) System.out.println(x + y); //System.out.println(“atguigu”); else //就近原则 System.out.println("x is " + x);
//课后练习3:测算狗的年龄 int dogAge = 6; if(dogAge >= 0 && dogAge <= 2){ System.out.println("相当于人的年龄:" + dogAge * 10.5); }else if( dogAge > 2){ System.out.println("相当于人的年龄:" + (2 * 10.5 + (dogAge - 2) * 4)); }else{ System.out.println("狗狗还没出生呢!"); } //课后练习4:如何获取一个随机数:10 - 99 int value = (int)(Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --->[10.0, 100.0) -->[10,99] System.out.println(value); //公式:[a,b] : (int)(Math.random() * (b - a + 1) )+ a}
}
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每 一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗 相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
package work.com.cn.entity; import java.util.Scanner; public class IfExer { public static void main(String[] args) { System.out.println("请输入狗狗的年龄(0~100):"); Scanner scanner = new Scanner(System.in); int dogAge = scanner.nextInt(); if(dogAge <= 2){//狗的前两年每 一年相当于人类的10.5岁 System.out.println("相当于人类年龄:"+dogAge*10.5); }else if(dogAge > 2){//之后每增加一年就增加四岁。那么5岁的狗 相当于人类多少年龄呢? System.out.println("相当于男的年龄"+(2*10.5+(dogAge-2)*4)); }else { System.out.println("可爱的狗狗还没有降生呢?"); } } } ## 结婚判断 > ~~~java > /* > 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件: > 高:180cm以上;富:财富1千万以上;帅:是。 > 如果这三个条件同时满足,则:“我一定要嫁给他!!!” > 如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。” > 如果三个条件都不满足,则:“不嫁!” > > */ > > import java.util.Scanner; > > class Marry { > public static void main(String[] args) { > > Scanner scan = new Scanner(System.in); > > System.out.println("请输入你的身高:(cm)"); > int height = scan.nextInt(); > System.out.println("请输入你的财富:(千万)"); > double wealth = scan.nextDouble(); > > /* > 方式一: > System.out.println("请输入你是否帅:(true/false)"); > boolean isHandsome = scan.nextBoolean(); > > if(height >= 180 && wealth >= 1 && isHandsome){ > System.out.println("我一定要嫁给他!!!"); > }else if(height >= 180 || wealth >= 1 || isHandsome){ > System.out.println("嫁吧,比上不足,比下有余。"); > }else{ > System.out.println("不嫁!"); > } > */ > > //方式二: > System.out.println("请输入你是否帅:(是/否)"); > String isHandsome = scan.next(); > > > if(height >= 180 && wealth >= 1 && isHandsome.equals("是")){ > System.out.println("我一定要嫁给他!!!"); > }else if(height >= 180 || wealth >= 1 || isHandsome.equals("是")){ > System.out.println("嫁吧,比上不足,比下有余。"); > }else{ > System.out.println("不嫁!"); > } > } > } > > ~~~ > > ## switch-case结构的基本使用 > switch(表达式){ > > case 常量1: > > 语句1 > > ; // break; > > case 常量2: > > 语句2; > > // break; … … > > case 常量N: > > 语句N; // > > break; > > default: 语句; > > // break; > > } > > ~~~java > package work.com.cn.entity; > /* > 分支结构之二:switch-case > > 1.格式 > switch(表达式){ > case 常量1: > 执行语句1; > //break; > > case 常量2: > 执行语句2; > //break; > > ... > default: > 执行语句n; > //break; > > } > 2.说明: > ① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。 > 当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构 > 末尾结束为止。 > > ② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构 > > ③ switch结构中的表达式,只能是如下的6种数据类型之一: > byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增) > > ④ case 之后只能声明常量。不能声明范围。 > > ⑤ break关键字是可选的。 > > ⑥ default:相当于if-else结构中的else. > default结构是可选的,而且位置是灵活的。 > */ > public class SwitchCase { > public static void main(String[] args) { > int number =1; > switch(number){ > case 0: > System.out.println("zero"); > case 1: > System.out.println("one"); > break; > case 2: > System.out.println("two"); > break; > case 3 : > System.out.println("third"); > break; > default: > } > } > } > > ~~~ > > > > ### 练习题 > > 1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输 出 “other” ```1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输 出 “other” package work.com.cn.entity; import java.util.Scanner; //1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输 出 “other”。 public class SwitchChar { public static void main(String[] args) { System.out.println("请输入值你想要的值"); Scanner scanner = new Scanner(System.in); //键盘上不能输入char类型的数据,只能通过输入字符串的形式,截取第一个字符来实现 char charValue = scanner.next().charAt(0); switch (charValue) { case 'a': System.out.println("A"); break; case 'b': System.out.println("B"); break; case 'c': System.out.println('C'); break; case 'd': System.out.println("D"); break; case 'e': System.out.println('E'); break; default: System.out.println("other"); break; } } } ``` ~~~java /* 例题:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。 说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。 */ class SwitchCaseTest1 { public static void main(String[] args) { /* int score = 78; switch(score){ case 0: case 1: case 2: ... case 100: } */ /* int score = 78; if(score >= 60){ }else{ } */ int score = 78; switch(score / 10){ case 0: case 1: case 2: case 3: case 4: case 5: System.out.println("不及格"); break; case 6: case 7: case 8: case 9: case 10: System.out.println("及格"); break; } //更优的解决方案: switch(score / 60){ case 0: System.out.println("不及格"); break; case 1: System.out.println("及格"); break; } } }