Skip to content

Java 中的流程控制语句

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

程序设计中规定的三种流程结构,即:

  1. 顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转。
  2. 分支结构:根据条件,选择性地执行某段代码。有 if…else 和 switch-case 两种分支语句。
  3. 循环结构:根据循环条件,重复性的执行某段代码。有 forwhiledo-while 三种循环语句。(JDK5.0 提供了 foreach 循环,方便的遍历集合、数组元素)

1、顺序结构

顺序结构就是程序从上到下逐行地执行。表达式语句都是顺序执行的。并且上一行对某个变量的修改对下一行会产生影响。

java
// javac -encoding utf-8 Xxx.java
// java Xxx
public class StatementTest{
	public static void main(String[] args){
		int x = 1;
		int y = 2;
		System.out.println("x = " + x);		
		System.out.println("y = " + y);	
		//对 x、y 的值进行修改
		x++;
		y = 2 * x + y;
		x = x * 10;	
		System.out.println("x = " + x);
		System.out.println("y = " + y);
  }
}

Java 中定义变量时采用合法的前向引用。如:

java
public static void main(String[] args) {
	int num1 = 12;
	int num2 = num1 + 2;
}

错误形式:

java
public static void main(String[] args) {
	int num2 = num1 + 2;
	int num1 = 12;
}

2、分支语句

1)if-else 条件判断结构

结构 1:单分支条件判断:if

  • 格式:
if(条件表达式){
  语句块;
  • 说明:

条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量。

  • 执行流程:

首先判断条件表达式看其结果是 true 还是 false,

如果是 true 就执行语句块,

如果是 false 就不执行语句块。

结构 2:双分支条件判断:if...else

  • 格式:
if(条件表达式) { 
  语句块 1;
} else {
  语句块 2;
}
  • 执行流程:

首先判断条件表达式看其结果是 true 还是 false,

如果是 true 就执行语句块 1,

如果是 false 就执行语句块 2。

结构 3:多分支条件判断:if...else if...else

  • 格式:
if (条件表达式 1) {
  语句块 1;
} else if (条件表达式 2) {
  语句块 2;
}
	...
} else if (条件表达式 n) {
 	语句块 n;
} else {
  	语句块 n+1;
}
  • 说明:一旦条件表达式为 true,则进入执行相应的语句块。执行完对应的语句块之后,就跳出当前结构。

  • 执行流程:

  1. 首先判断关系表达式 1 看其结果是 true 还是 false
  2. 如果是 true 就执行语句块 1,然后结束当前多分支
  3. 如果是 false 就继续判断关系表达式 2,看其结果是 true 还是 false
  4. 如果是 true 就执行语句块 2,然后结束当前多分支
  5. 如果是 false 就继续判断关系表达式,看其结果是 true 还是 false
  6. 如果没有任何关系表达式为 true,就执行语句块 n+1,然后结束当前多分支

案例 1:

成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查。

java
// 成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查。

// 使用 Scanner 类需要引入的包
import java.util.Scanner;

public class IfElseTest1 {
	public static void main(String[] args){
    // 使用 Scanner 的固定写法
    Scanner scan = new Scanner(System.in);

		int heartBeats;
    System.out.println("成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查。");
    System.out.println("请输入你的心率:");

    // 下面这行代码会阻塞程序运行
    heartBeats = scan.nextInt();

		if(heartBeats < 60 || heartBeats > 100){
			System.out.println("你需要做进一步的检查");
		}
		System.out.println("体检结束,你的身体健康无恙!");

    // 关闭 scan,防止内存泄漏,导致内存溢出
    scan.close();
	}
}

案例 2:

定义一个整数,判定是偶数还是奇数。

java
// 定义一个整数,判定是偶数还是奇数。

// 使用 Scanner 类需要引入的包
import java.util.Scanner;

public class IfElseTest2 {
	public static void main(String[] args){
    // 使用 Scanner 的固定写法
    Scanner scan = new Scanner(System.in);
    
		int a;

    System.out.println("请输入一个整数,我来判断它是偶数还是奇数!");
    // 下面这行代码会阻塞程序运行
    a = scan.nextInt();

		if(a % 2 == 0) {
			System.out.println(a + " 是偶数");
		} else{
			System.out.println(a + " 是奇数");
		}

    // 关闭 scan,防止内存泄漏,导致内存溢出
    scan.close();
	}
}

案例 3:

岳小鹏参加 Java 考试,他和父亲岳不群达成承诺:如果成绩为 100 分时,奖励一辆跑车;成绩为 (80,99] 时,奖励一辆山地自行车;当成绩为[60,80] 时,奖励环球影城一日游;其它时,胖揍一顿。

说明:默认成绩是在 [0,100] 范围内。

java
// 岳小鹏参加 Java 考试

// 使用 Scanner 类需要引入的包
import java.util.Scanner;

public class IfElseTest3 {
    public static void main(String[] args) {
        // 使用 Scanner 的固定写法
        Scanner scan = new Scanner(System.in);

        int score; // 岳小鹏的期末成绩

        System.out.println("请输入岳小鹏的期末成绩");
        score = scan.nextInt();

        if (score < 0 || score > 100) {
          System.out.println("分数为 0 ~ 100,你这分数怎么得到的?");
          return;
        } else {
          // 写法一:默认成绩范围为 [0,100]
          if (score == 100){
              System.out.println("奖励一辆跑车");
          } else if (score > 80 && score <= 99){    // 错误的写法:} else if(80 < score <= 99) {
              System.out.println("奖励一辆山地自行车");
          } else if (score >= 60 && score <= 80){
              System.out.println("奖励环球影城玩一日游");
          } else{
          	 System.out.println("胖揍一顿");
          }


          // 写法二:
          // 默认成绩范围为 [0,100]
          if (score == 100){
              System.out.println("奖励一辆跑车");
          } else if (score > 80){
              System.out.println("奖励一辆山地自行车");
          } else if (score >= 60){
              System.out.println("奖励环球影城玩一日游");
          } else {
              System.out.println("胖揍一顿");
          }
        }

        // 关闭 scan,防止内存泄漏,导致内存溢出
        scan.close();
    }
}

2)if...else 嵌套

在 if 的语句块中,或者是在 else 语句块中,又包含了另外一个条件判断(可以是单分支、双分支、多分支),就构成了嵌套结构。

执行的特点:

(1)如果是嵌套在 if 语句块中的,只有当外部的 if 条件满足,才会去判断内部的条件。

(2)如果是嵌套在 else 语句块中的,只有当外部的 if 条件不满足,进入 else 后,才会去判断内部的条件。

案例 4:

由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。

java
// 由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。

// 使用 Scanner 类需要引入的包
import java.util.Scanner;

class IfElseTest4 {
	public static void main(String[] args) {
    // 使用 Scanner 的固定写法
    Scanner scan = new Scanner(System.in);

    //声明 num1,num2,num3 三个变量并赋值
    int num1, num2, num3;

    System.out.println("由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。");

    System.out.println("请输入变量 num1");
    num1 = scan.nextInt();

    System.out.println("请输入变量 num2");
    num2 = scan.nextInt();

    System.out.println("请输入变量 num3");
    num3 = scan.nextInt();

    if(num1 >= num2){
      if(num3 >= num1)
        System.out.println(num2 + "-" + num1 + "-" + num3);
      else if(num3 <= num2)
        System.out.println(num3 + "-" + num2 + "-" + num1);
      else
        System.out.println(num2 + "-" + num3 + "-" + num1);
    }else{ //num1 < num2
      
      if(num3 >= num2){
        System.out.println(num1 + "-" + num2 + "-" + num3);
      }else if(num3 <= num1){
        System.out.println(num3 + "-" + num1 + "-" + num2);
      }else{
        System.out.println(num1 + "-" + num3 + "-" + num2);
      }
    }

    // 关闭 scan,防止内存泄漏,导致内存溢出
    scan.close();
	}
}

3)其它说明

  • 语句块只有一条执行语句时,一对 {} 可以省略,但建议保留
  • 当 if-else 结构是“多选一”时,最后的 else 是可选的,根据需要可以省略

4)练习

练习 1:

对下列代码,若有输出,指出输出结果。

java
// 对下列代码,若有输出,指出输出结果。
public class Exer1 {
  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);
  }
}

练习 2:

如果写成 if(b = false) 能编译通过吗?如果能,结果是?

java
// 对下列代码,若有输出,指出输出结果。
public class Exer2 {
  public static void main(String[] args) {
    // 如果写成 if(b = false) 能编译通过吗?如果能,结果是?
    boolean b = true;
    // 如果写成 if(b = false) 能编译通过吗?如果能,结果是?
    if(b == false) 	 // 建议:if(!b)
      System.out.println("a");
    else if(b)
      System.out.println("b");
    else if(!b)
      System.out.println("c");
    else
      System.out.println("d");
  }
}

练习 3:

定义两个整数,分别为 small 和 big,如果第一个整数 small 大于第二个整数 big,就交换。输出显示 small 和 big 变量的值。

java
// 定义两个整数,分别为 small 和 big,如果第一个整数 small 大于第二个整数 big,就交换。输出显示 small 和 big 变量的值。
public class Exer3 {
    public static void main(String[] args) {
        int small = 10;
        int big = 9;

        if (small > big) {
            int temp = small;
            small = big;
            big = temp;
        }
        System.out.println("small=" + small + ",big=" + big);
    }
}

练习 4:

小明参加期末 Java 考试,通过考试成绩,判断其 Java 等级,成绩范围为 [0,100]

  • 90-100 优秀
  • 80-89 好
  • 70-79 良
  • 60-69 及格
  • 60-以下 不及格
java
// 小明参加期末 Java 考试,通过考试成绩,判断其 Java 等级,成绩范围为 `[0,100]`。

import java.util.Scanner;
//写法一:
public class Exer4 {
    public static void main(String[] args) {
        int score = 89;
        System.out.println("小明的期末 Java 成绩是:" + score);

        if (score < 0 || score > 100) {
            System.out.println("你的成绩是错误的");
        } else if (score >= 90 && score <= 100) {
            System.out.println("你的成绩属于优秀");
        } else if (score >= 80 && score < 90) {
            System.out.println("你的成绩属于好");
        } else if (score >= 70 && score < 80) {
            System.out.println("你的成绩属于良");
        } else if (score >= 60 && score < 70) {
            System.out.println("你的成绩属于及格");
        } else {
            System.out.println("你的成绩属于不及格");
        }
        
        // 写法二:
        if (score < 0 || score > 100) {
            System.out.println("你的成绩是错误的");
        } else if (score >= 90) {
            System.out.println("你的成绩属于优秀");
        } else if (score >= 80) {
            System.out.println("你的成绩属于好");
        } else if (score >= 70) {
            System.out.println("你的成绩属于良");
        } else if (score >= 60) {
            System.out.println("你的成绩属于及格");
        } else {
            System.out.println("你的成绩属于不及格");
        }
    }
}

练习 5:

编写程序,声明 2 个 int 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!”。

java
// 编写程序,声明 2 个 int 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!”。
public class Exer5 {

    public static void main(String[] args) {
        int num1 = 12, num2 = 42;
        
        if (num1 + num2 >= 50) {
            System.out.println("hello world!");
        }
    }
}

练习 6:

编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。否则,打印两数的乘积。

java
// 编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。否则,打印两数的乘积。

public class Exer6 {

    public static void main(String[] args) {
        double d1 = 21.2,d2 = 12.3;
        
        if(d1 > 10.0 && d2 < 20.0){
            System.out.println("两数之和为:" + (d1 + d2));
        }else{
            System.out.println("两数乘积为:" + (d1 * d2));
        }
    }

}

练习 7:判断水的温度

如果大于 95℃,则打印“开水”;

如果大于 70℃ 且小于等于 95℃,则打印“热水”;

如果大于 40℃ 且小于等于 70℃,则打印“温水”;

如果小于等于 40℃,则打印“凉水”。

java
// 练习 7:判断水的温度
public class Exer7 {

    public static void main(String[] args) {
        int waterTemperature = 85;
        
        if(waterTemperature > 95){
            System.out.println("开水");
        }else if(waterTemperature > 70 && waterTemperature <= 95){
            System.out.println("热水");
        }else if(waterTemperature > 40 && waterTemperature <= 70){
            System.out.println("温水");
        }else{
            System.out.println("凉水");
        }
    }
}

Released under the MIT License.