程序流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组
合成能完成一定功能的小逻辑模块。
• 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
顺序结构
分支结构
循环结构顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构 根据条件,选择性地执行某段代码。 有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;
}
}
}