Java Design Demo--枚举类型--避免嵌套过多

我们在初学时用过if--else的语句,也用过switch,但是你会发觉如果嵌套过多代码可读性变差。

如以下我们写过通过分数给学生成绩评级,简写后的代码如下


A示例

public class Test {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
       int k=79;
       System.out.print(exem(k));
	}

  public static String exem(int k)
  {
	  int j=k/10;
	  String str=null;
		switch (j) {
		case 9:
			str="优";
			break;
		case 8:
			str="良";
			break;
		case 7:
			str="良";
			break;
		case 6:
			str="及格";
			break;
		default:
			if(j>10||j<0)str="不存在的分数";
			if(j<6)System.out.println("不及格");
			if(k==100)str="优";
			break;
		}
		return str;
  }

}

B:

这样写有种面向过程的感觉,而且有点不符合人类思维,我们人类思考,首先是对优良 及格 不及格有一个概念,有知道他的范围.....然后再去判断他的分数

使用枚举进行重构:


public enum Exam {

	A(90, 100, "优"), B(70, 89, "良"), C(60, 69, "及格"), D(0, 60, "不及格");

	private int max;
	private int min;
	private String assess;

	/***
	 * @param min
	 *            最小分数段
	 * @param max
	 *            最大分数段
	 * @param assess
	 *            评级
	 */
	private Exam(int min, int max, String assess) {
		this.max = max;
		this.min = min;
		this.assess = assess;
	}


	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "["+assess+":"+min + "~" + max+"]";

	}

	public static Exam get(int source) {
		for (Exam e : Exam.values()) {

			if (source <= e.max && source >= e.min) {
				return e;
			}
		}
		return null;
	}

	public String getAssess() {
		return assess;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(Exam.C);
		System.out.println(Exam.get(59).getAssess());
		System.out.println(Exam.get(79).getAssess());
	}

}




反思,如果为了效率,我绝大多数会使用A示例,但是工程较大,就采用B示例,

因为B的可读性和修改性,扩展性,重用性都比A示例要好用的多。

相比A示例我们还知道各评级的分数段,在灵活性也变强了。

附带枚举类型的api方法


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值