Java基础教程

第一章: 开启Java学习之旅

第二章: 掌握计算机基础知识

第三章: 掌握命令行基础知识

第四章: 我的第一个Java程序

第五章: Java编程必备基础

第六章: Java编程的核心:控制结构

第七章: Java面向对象基础

第八章: Java面向对象进阶

第九章: Java字符串类型

第十章: Java数组与数据结构

第十一章: Java高级数据结构

第十二章: Java并发编程基础

首页 > Java基础教程 > 第六章: Java编程的核心:控制结构 > 6.1节: 条件控制结构

6.1节: 条件控制结构

薯条老师 2021-11-15 11:59:21 191880 0

编辑 收藏

广州番禺Python, Java小班周末班培训

第四期线下Java, Python小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析, Java中高级工程师培训。授课详情请点击:http://chipscoco.com/?cate=6    

6.1.1 理解条件控制

在日常生活中,我常喜欢说如果,“如果怎么样,那么就会怎么样”。“如果”表达的是一种假设情况,即在假设成立的情况下,会执行某种操作,在假设不成立的情况下,同样会执行某种操作。例如在以下的“如果”句式中:

如果明天天气晴朗,那我会去爬莲花山。    

否则我会去街角的咖啡店喝一杯咖啡。    

在以上句式中提出的假设为:

明天天气晴朗。    

假设成立时所执行的操作:

 爬莲花山。    

假设不成立时所执行的操作:

喝咖啡。    

这种以“如果”句式表达的一种逻辑结构,就是一种条件控制。条件控制的核心是先提出一个假设条件,如果条件成立就执行什么样的操作,如果条件不成立,就继续判断其它的条件。在编程语言中,也是通过“如果”来进行条件控制,其对应的关键词是“if”,if的中文释义正是“如果”。

6.1.2 if, else if, else

在Java中主要通过if, else if,else来进行条件控制。if的语法结构:

if (expression) {
    ;
} else if (expression){
    ;
} else {
    ;
}

if语句定义条件控制的主干,expression表达式,表达式的值须为布尔类型。如果表达式的值为真值,那么就执行相应的操作。else if用来定义分支条件,即在if语句中的条件不成立的情况下,继续判断else if语句中的条件是否成立。else表示if语句和else if语句中的条件都不成立的情况下,才执行的操作。在条件控制的语法结构中,必须有一个if,可以有多个else if,但最多只有1个else。

非法的条件控制结构:

if (expression){
 ;
} else if (expression){
   ;
} else {
;
} else {
   ;
}

在以上非法的条件控制结构中,存在多个else语句。else  if语句必须在if语句的后面,else语句必须是控制结构中的最后一个语句。

非法的条件控制结构:

else if (expression){
    ;
} if (expression){
    ;
} else {
    ;
}  else if {
    ;
}

存在多个if语句时,Python会将每一个if语句视为一个单独的条件控制结构:

if (expression){
    // 这是一个单独的条件控制结构
}
if (expression){
    // 这是一个单独的条件控制结构
}

6.1.3 条件表达式

条件控制结构中的表达式的值必须为布尔类型,在5.5节学到了数据运算,其中关系运算和逻辑运算的输出都为布尔类型。

代码实例-判断随机数大小:

// 导入Random类来生成随机数
import java.util.Random;
public class HelloJava{
    public  static void main(String[] args) {
        // 构造Random对象以获取随机数
        Random random = new Random();
        // 通过Random对象的nextInt方法来获取指定范围内的正随机数
        // 获取[0,100)区间内的正随机数
        int x = random.nextInt(100);
        int y = random.nextInt(100);
        System.out.println("x:"+x+" y:"+y);
        if (x > y) {
            System.out.println("x > y");
        } else {
            System.out.println("x <= y");
        }
    }
}

在5.5节讲到了逻辑运算中的短路逻辑,短路逻辑是指进行逻辑运算时,一旦符合短路逻辑条件,就立即停止表达式后面的逻辑运算。举个简单的例子:

// 导入Random类来生成随机数
import java.util.Random;
public class HelloJava{
    public  static void main(String[] args) {
        // 构造Random对象以获取随机数
        Random random = new Random();
        // 通过Random对象的nextInt方法来获取指定范围内的随机数
        // 获取[0,100)之间的正随机数
        int x = random.nextInt(100);
        int y = random.nextInt(100);
        // 如果x大于10,那么立即触发短路,不会再计算后面的表达式
        if(x < 10 && x*y > 100) {
            System.out.println("y一定大于10");
        }else if ( x >= 10) {
            System.out.println("y可能小于10");
        }else {
            System.out.println("y一定小于10");
        }
    }
}

在以上代码中,if中的表达式为逻辑与运算,在逻辑与运算中只要一个为假,那么整个表达式的值就为假,所以当计算出x大于等于10时,就会触发短路,立即停止后面的逻辑运算,转而判断下一个分支条件。

6.1.4 条件控制可以嵌套

嵌套是指可以在条件控制结构里面再定义一层条件控制结构。

代码实例:

// 导入Random类来生成随机数
import java.util.Random;
public class HelloJava{
    public  static void main(String[] args) {
        // 构造Random对象以获取随机数
        Random random = new Random();
        // 通过Random对象的nextInt方法来获取指定范围内的随机数
        // 获取[0,100)之间的正随机数
        int x = random.nextInt(100);
        int y = random.nextInt(100);
        
        // 判断x与y的积是否大于10
        if(x*y > 100) {
            // 再嵌套一层if,来判断x是否小于10,如果x小于10,那么y一定大于10
            if( x < 10){
                System.out.println("y一定大于10");
            } else {
                System.out.println("y可能大于10");
            }
        }
    }
}

if嵌套的深度不宜过深,通常保持在三层以内即可。层数过多会导致代码的可读性变差,代码逻辑难以理解,难以维护。

6.1.5 Java的三元运算

三元运算符是软件编程中的一种固定格式,在Java中,通过?:操作符来实现三元运算。三元运算的语法格式:

expression ? expression1: expression2    

三元运算符的执行逻辑为:如果条件表达式expression的值为真,就返回表达式expression1的值,否则返回表达式expression2的值。使用三元运算符在特定场景下可以简化if语句的使用。未使用三元运算符的代码实例-计算两个随机数中的最大值:

// 导入Random类来生成随机数
import java.util.Random;
public class HelloJava{
    public  static void main(String[] args) {
        // 构造Random对象以获取随机数
        Random random = new Random();
        // 通过Random对象的nextInt方法来获取指定范围内的随机数
        // 获取[0,100)之间的正随机数
        int x = random.nextInt(100);
        int y = random.nextInt(100);
        // 先假定x为最大值
        int max = x;
        if(x < y) {
        // 如果x比y小,那么最大值一定是y
            max = y;
        }
        System.out.println("最大值是:"+max);
    }
}

使用三元运算的代码实例-计算两个随机数中的最大值:

// 导入Random类来生成随机数
import java.util.Random;
public class HelloJava{
    public  static void main(String[] args) {
        // 构造Random对象以获取随机数
        Random random = new Random();
        // 通过Random对象的nextInt方法来获取指定范围内的随机数
        // 获取[0,100)之间的正随机数
        int x = random.nextInt(100);
        int y = random.nextInt(100);
        // 如果x大于y,那么最大值就是x,否则是y
        int max = x > y ? x:y;
        System.out.println("最大值是:"+max);
    }
}

这两则代码实例实现的是同样的效果,但使用三目运算符的代码看起来更简洁。在条件分支比较多的情况下,不适合使用三目运算符,读者需根据实际中的情况来灵活使用。

6.1.6 switch-case语句

switch -case也叫做开关语句,与if一样用作条件控制:根据不同的条件,执行不同的操作。switch-case的语法格式:

switch( expression ){
    case constExpression:
        ;
        break;
    case constExpression:
        ;
        break;
    default:
        ;
        break;
}

switch语句中的expression表达式必须输出整型,case语句中的constExpression表示常量表达式。Java在执行switch-case语句时,会按从上到下的顺序,将expression的值与case中的常量表达式进行匹配,直到匹配成功。

break语句用来停止继续往下进行匹配,即,如果不执行break,Java会继续判断下一个case中的常量表达式是否与expression的值匹配。    

default用来定义所有case都不匹配的情况下才执行的操作。现在来写一个简单的程序,根据数字的奇偶性来做开关,一旦为偶数就输出芝麻开门,为奇数则输出芝麻关门,都不匹配就输出芝麻丢了:

import java.util.Random;
public class HelloJava{
    public  static void main(String[] args) {
        Random random = new Random();
        // 获取[0,10)之间的正随机数
        int x = random.nextInt(10);
        switch( x % 2){
            // 先计算x%2表达式的值,然后与case中的常量进行匹配
            case 0:
                System.out.println("芝麻开门");
                // 执行break会中止与下面case的匹配
                break;
            case 1:
                System.out.println("芝麻关门");
                break;
            default:
                System.out.println("芝麻丢了");
                // 思考题:芝麻会丢吗?
                break;
        }
    }
}

6.1.7 课后习题

(1) 谈谈你对条件控制的理解。    

(2) 条件控制的核心是什么?    

(3) 假设有三个随机数:x,y,z,请编写条件控制语句来输出变量中的最大值和最小值。    

(4) 假设有四个随机数:x,y,z,k,请编写条件控制语句来输出变量中的次大值和次小值。    

(5) 将问题(4)和问题(5)中的程序通过三元运算符进行实现    

(6) 将6.1.6节中的程序改成用if结构来实现。    

6.1.8 高薪就业班


欢迎 发表评论: