第三章 条件选择结构和分支结构

3.1 基本IF选择结构

在Java中,if语句用于根据条件执行不同的代码块。if语句是Java中最常用的控制结构之一,它使得程序能够根据不同的条件执行不同的代码,实现灵活的逻辑控制。

3.1.1 语法格式
if(condition){
	//如果条件为真,则执行这里面的代码
}

解释:

  1. condition:是一个布尔表达式,用于判断条件是否为真或假。如果条件为真,则执行if代码块中的语句。
  2. if代码块:包含在if语句中的代码块,用于在条件为真时执行。
3.1.2 案列
public class Test3_1{
	public static void main(String args[]){
		int number=5;
		if(number>0){
			System.out.println(number+"是一个正数");
		}
	}
}
3.1.3 练习

练习1:输入两个数,按照从小到大的顺序排序

import java.util.Scanner;

public class Practice3_1{
	public static void main(String args[]){
		Scanner input=new Scanner(System.in);
		int a,b;
		//输入a的值
		System.out.print("请输入a的数值:");
		a=input.nextInt();
		System.out.println();
		//输入b的值
		System.out.print("请输入b的数值:");
		b=input.nextInt();
		System.out.println();
		
		//判断a,b的大小,进行排序
		if(a>b){
			int t;//定义变量t
			t=a;
			a=b;
			b=t;
		}
		
		//从小到大输入结果
		System.out.println("从小到大分别为:"+a+"、"+b);
	}
}

练习2:输入三个数,并将他们按照从小到大的顺序排序

import java.util.Scanner;

public class Practice3_2{
	public static void main(String args[]){
		Scanner input=new Scanner(System.in);
		int a,b,c;
		//输入a的值
		System.out.print("请输入a的数值:");
		a=input.nextInt();
		System.out.println();
		//输入b的值
		System.out.print("请输入b的数值:");
		b=input.nextInt();
		System.out.println(); 
		//输入c的值
		System.out.print("请输入c的数值:");
		c=input.nextInt();
		System.out.println();
		
		//判断a,b的大小,进行排序
		if(a>b){
			int t;//定义变量t
			t=a;
			a=b;
			b=t;
		}
		//判断a,c的大小,进行排序
		if(a>c){
			int t;//定义变量t
			t=a;
			a=c;
			c=t;
		}
		//判断a,b的大小,进行排序
		if(b>c){
			int t;//定义变量t
			t=b;
			b=c;
			c=t;
		}
		
		//从小到大输入结果
		System.out.println("从小到大分别为:"+a+"、"+b+"、"+c);
	}
}

3.2 IF ELSE选择结构

if-else语句是Java中常用的条件控制语句,它可以根据条件的真假执行不同的代码块。

3.2.1 基本语法
if (condition) {
    // 如果条件为真,执行这里的代码块
} else {
    // 如果条件为假,执行这里的代码块
}

解释:

  1. condition:是一个布尔表达式,用于判断条件是否为真或假。如果条件为真,则执行if代码块中的语句;如果条件为假,则执行else代码块中的语句。
  2. if代码块:包含在if语句中的代码块,用于在条件为真时执行。
  3. else代码块(可选):包含在else语句中的代码块,用于在条件为假时执行。
3.2.2 案列
public class Test3_2{
	public static void main(String args[]){
		int num = 10;

		if (num > 0) {
			System.out.println("数字是正数");
		} else {
			System.out.println("数字是负数或零");
		}
	}
}

在这个示例中,如果num大于0,则输出"数字是正数";否则,输出"数字是负数或零"。

3.2.3 练习

练习3:输入小明的数学成绩,判断小明是否及格(满分100分);

import java.util.Scanner;

public class Practice3_3{
	public static void main(String args[]){
		Scanner input=new Scanner(System.in);
		//输入成绩
		int math;
		System.out.print("请输入小明的数学成绩:");
		math=input.nextInt();
		
		//判断是否及格
		if(math>=60){
			System.out.println("小明的数学成绩为"+math+"分,及格了");
		}else{
			System.out.println("小明的数学成绩为"+math+"分,不及格");
		}
	}
}

3.3 多重IF选择结构

除了基本的if-else语句,还可以使用多个else if语句来处理多个条件。这样可以实现更复杂的条件判断。

3.3.1 语法格式
if(condition){
    // 如果条件为真,执行这里的代码块
}else if(condition){
    // 如果条件为真,执行这里的代码块
}
...
else{
   //不满足以上条件后,执行这里的代码块     
}

解释:

  1. condition:是一个布尔表达式,用于判断条件是否为真或假。如果条件为真,则执行if代码块中的语句;如果条件为假,则执行else代码块中的语句。
  2. else if代码块:当condition条件在此代码块为真,以上的if和else if都为假时,则会执行。
  3. else代码块:当if和else if都不满足时,执行此代码块内容。
3.3.2 案列
public class Test3_3{
	public static void main(String args[]){
		int num = 10;

		if (num > 0) {
			System.out.println("数字是正数");
		} else if (num < 0) {
			System.out.println("数字是负数");
		} else {
			System.out.println("数字是零");
		}
	}
}

在这个示例中,如果num大于0,则输出"数字是正数";如果num小于0,则输出"数字是负数";如果num等于0,则输出"数字是零"。

3.3.3 练习

练习4:输入小明的成绩,根据成绩分数,判断属于那个档次(A、B、C、D、E)

import java.util.Scanner;

public class Practice3_4{
	public static void main(String args[]){
		Scanner input=new Scanner(System.in);
		//输入成绩
		int english;
		System.out.print("请输入小明的数学成绩:");
		english=input.nextInt();
		
		//判断是否及格
		if(english>=90){
			System.out.println("小明的成绩位于A档次");
		}else if(english>=80){
			System.out.println("小明的成绩位于B档次");
		}else if(english>=70){
			System.out.println("小明的成绩位于C档次");
		}else if(english>=60){
			System.out.println("小明的成绩位于D档次");
		}else{
			System.out.println("小明的成绩位于E档次");
		}
	}
}

3.4 嵌套IF选择结构

嵌套if语句是指在一个if代码块中嵌套另一个if语句,以实现更复杂的条件判断。通过多重if语句,可以根据不同的条件执行不同的代码块。嵌套if语句可以根据不同的条件进行嵌套,以实现更复杂的条件判断和逻辑控制。在实际编程中,需要注意多重if语句的层级和逻辑关系,确保代码的可读性和正确性。

3.4.1 案列
public class Test3_4{
	public static void main(String args[]){
		int num = 10;

		if (num > 0) {
			System.out.println("数字是正数");
			if (num % 2 == 0) {
				System.out.println("数字是偶数");
			} else {
				System.out.println("数字是奇数");
			}
		} else {
			System.out.println("数字是负数或零");
		}		
	}
}

在这个示例中,首先判断num是否大于0。如果条件为真,则输出"数字是正数",然后继续判断num是否为偶数。如果num是偶数,则输出"数字是偶数";如果num是奇数,则输出"数字是奇数"。如果初始条件为假,则执行else代码块中的语句,输出"数字是负数或零"。

3.5 Switch分支结构

switch语句是Java中另一种常用的条件控制语句,它可以根据不同的取值执行相应的代码块。switch语句适用于多个固定的取值情况,可以替代嵌套if-else语句的使用。

3.5.1 基本语法
switch (expression) {
    case value1:
        // 当expression的值等于value1时执行这里的代码块
        break;
    case value2:
        // 当expression的值等于value2时执行这里的代码块
        break;
    case value3:
        // 当expression的值等于value3时执行这里的代码块
        break;
    // 可以有更多的case语句
    default:
        // 当expression的值与前面的所有case都不匹配时执行这里的代码块
        break;
}

解释:

  1. expression:是一个表达式,其值将与每个case的值进行比较。
  2. case value1:表示一个取值情况,当expression的值等于value1时,执行该case下的代码块。
  3. break:在每个case的代码块末尾使用break语句,用于终止switch语句的执行。如果没有break语句,程序将继续执行下一个case的代码块,直到遇到break或switch语句结束。
  4. default:可选的default部分用于处理expression的值与所有case都不匹配的情况。如果所有的case都不匹配且没有default部分,则switch语句不执行任何操作。
3.5.2 案列
public class Test3_5{
	public static void main(String args[]){
		int day = 3;
		String dayName;

		switch (day) {
			case 1:
				dayName = "星期一";
				break;
			case 2:
				dayName = "星期二";
				break;
			case 3:
				dayName = "星期三";
				break;
			case 4:
				dayName = "星期四";
				break;
			case 5:
				dayName = "星期五";
				break;
			case 6:
				dayName = "星期六";
				break;
			case 7:
				dayName = "星期日";
				break;
			default:
				dayName = "无效的日期";
				break;
		}

		System.out.println("今天是" + dayName);
				
	}
}
import java.util.Scanner;

public class Test3_6{
	public static void main(String args[]){
		Scanner input=new Scanner(System.in);
		char ch;
		System.out.print("请输入A~Z字母中的一个字母(大写):");
		ch=input.next().charAt(0);//接受char类型
		
		switch(ch){
			case 'A':
			case 'B':
				System.out.println("恭喜你获得了一等奖");
				break;
			case 'C':
			case 'D':
			case 'E':
				System.out.println("恭喜你获得了二等奖");
				break;
			case 'F':
			case 'G':
			case 'H':
				System.out.println("恭喜你获得了三等奖");
				break;
			default:
				System.out.println("继续努力");
				break;
		}
	}
}

3.6 条件分支的代码优化

在编写if语句时,可以采取一些优化策略以提高代码的效率和可读性。

3.6.1 优化技巧
  1. 使用简单条件优先:将简单的条件放在if语句的前面,这样可以尽早地确定是否执行if语句块,从而减少不必要的计算。这样可以提高代码的执行效率。
  2. 避免冗余条件判断:如果条件判断中存在冗余的判断,可以进行简化或合并,以减少不必要的判断操作。这样可以提高代码的执行效率。
  3. 使用短路逻辑:在条件判断中使用短路逻辑(&&和||),可以减少不必要的判断操作。短路逻辑指的是,如果通过前面的条件已经可以确定整个表达式的结果,那么后面的条件将不再进行判断。这样可以提高代码的执行效率。
  4. 避免过长的条件表达式:过长的条件表达式可能会导致代码可读性下降。可以考虑将复杂的条件判断拆分成多个简单的条件判断,以提高代码的可读性。
  5. 使用switch语句替代多重if-else语句:如果有多个固定的取值情况,可以使用switch语句来替代多重if-else语句,以提高代码的可读性和执行效率。
  6. 使用位运算进行条件判断:在某些情况下,可以使用位运算来进行条件判断,以提高代码的执行效率。
  7. 考虑使用三元运算符:在某些简单的条件判断中,可以使用三元运算符(?:)来简化代码,提高代码的可读性。

需要注意的是,优化if语句时应注意平衡代码的可读性和执行效率。过度的优化可能会导致代码变得复杂难懂,影响代码的可维护性。因此,应根据具体的情况选择适当的优化策略。

3.6.2 案列
public class IfStatementOptimization {
    public void example() {
        int num = 10;

        // 使用简单条件优先
        if (num == 0) {
            // 执行代码块
        } else if (num == 1) {
            // 执行代码块
        } else {
            // 执行代码块
        }

        // 避免冗余条件判断
        boolean condition1 = true;
        boolean condition2 = false;
        if (condition1 && condition2) {
            // 执行代码块
        }

        // 使用短路逻辑
        boolean condition3 = true;
        boolean condition4 = false;
        if (condition3 || condition4) {
            // 执行代码块
        }

        // 使用switch语句替代多重if-else语句
        int value = 1;
        switch (value) {
            case 1:
                // 执行代码块
                break;
            case 2:
                // 执行代码块
                break;
            default:
                // 执行代码块
                break;
        }
    }
}

在上述示例中,展示了一些if语句的优化技巧,包括简单条件优先、避免冗余条件判断、使用短路逻辑和使用switch语句替代多重if-else语句。这些优化技巧可以根据实际情况灵活应用,以提高代码的效率和可读性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值