if-else和switch的练习及区别比较

嵌套分支,顾名思义,其实是在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。但是依据规范:分支层数最好不要超过3层

下面来看一个公园票价的练习吧。

import java.util.Scanner;

public class nestedBranches{
	public static void main(String args[]){
		System.out.println("请输入季节(1,代表旺季,2,代表淡季):");
		Scanner scanner = new Scanner(System.in);
		int season = scanner.nextInt();
		
		//因为在下面的过程中,ticketprice需要打折(*0.3),所以直接将ticketprice定义为double类型,以防精度丢失。
		double ticketprice1 = 30;
		double ticketprice2 = 20;
		if (season == 1){
			System.out.println("请输入年龄");
			int age = scanner.nextInt();
			if(age > 0 && age < 8){
				System.out.println("您的票价免费!");
			} else if(age > 8 && age <22){
			  System.out.println("您的票价是:"+(ticketprice1*0.5));
			} else if(age > 22 && age < 60){
			  System.out.println("您的票价是:"+(ticketprice1));
			} else if(age > 60){
			  System.out.println("你的票价是:"+(ticketprice1*0.3));
			}
		}else if(season == 2){
			System.out.println("请输入年龄:");
			int age = scanner.nextInt();
			if(age > 0 && age < 8){
			  System.out.println("您的票价免费!");
			} else if(age > 8 && age <22){
			  System.out.println("您的票价是:"+(ticketprice2*0.5));
			} else if(age > 22 && age < 60){
			  System.out.println("您的票价是:"+(ticketprice2));
			} else if(age > 60){
			  System.out.println("你的票价是:"+(ticketprice2*0.3));
			}
		}
	}
}

代码经过测验,不懂的小伙伴可以评论提问。

其实嵌套分支说白了就是if和else if之间的一个套用,逻辑理解起来比较简单,但是在大部分的场景下我们不会去用if-else,首先来说它的效率不是那么的高,其次就是它看上去多少会有些乱,当然这个因人而异。那么除了if-else,其实我们还可以选择去用switch。我们先来看一段switch的代码,再来讲解其中的原理。

import java.util.Scanner;
public class Test {
	public static void main(String[] args) {
		System.out.println("今天星期几:");
		Scanner scanner = new Scanner(System.in);
		int week = scanner.nextInt();
		switch (week){
			case 1:
				System.out.println("我和亦菲约会");
				break;
			case 2:
				System.out.println("我和志玲约会");
				break;
			case 3:
				System.out.println("我和诗诗约会");
				break;
			case 4:
				System.out.println("我和井空约会");
				break;
			case 5:
				System.out.println("我和热巴约会");
				break;
			default:
			System.out.println("参加各种party");	
		}
	}
}

这段代码是不是比if-else看着整洁的多。

switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true.

在比较的过程中,switch部分会被分配一个连续的查找表,switch case中不连续的部分也被添加上了相应的条目,switch表的大小不是根据case语句的多少,而是case的最大值的最小值之间的间距。在选择相应 的分支时,会先有一个cmp子句,如果大于查找表的最大值,则跳转到default子句。而其他所有的case语句的耗时都回事O(1).

相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。

其实,可以换一个简单点的总结

  • 如果判断的具体数值不多, 而且符合 byte、 short 、 int、 char, enum[枚举], String 这 6 种类型。 虽然两个语句都可以使用,但是建议使用 swtich 语句。
  • 其他情况: 对区间判断, 对结果为 boolean 类型的判断, 使用 if, if 的使用范围更广 。
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值