关于Table Driven Approach的一篇非常好的文章:
http://www.codeproject.com/Articles/42732/Table-driven-Approach
package com.ljn.base;
import java.util.Random;
public class TableDriven {
public static void main(String[] args) {
//实例1:计算税收
System.out.println(TaxCalculator.findTax(4300));
//实例2:计算成绩等级
for (int i = 0; i < 10; i++) {
double remark = new Random().nextInt(100) + 0.0;
System.out.println(remark + ", " + Grade.findGrade(remark));
}
}
}
/**实例0
* 表驱动法最直观的用法
* 代替if语句:
* if (January) return 31;
* ...
* if (December) return 31;
* 在一些查询算法中,表驱动法可以作为一种“以空间换时间”的方案
*/
class DayCountInMonth {
private static final int[] DAY_TABLE = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
//略去参数合法性检查。假设月份从1开始
public static int getDayCount(int month, boolean leapYear) {
int diff = (leapYear && (month == 2)) ? 1 : 0;
return DAY_TABLE[month - 1] + diff;
}
}
/**实例1
我国税法规定,公民每月工资、薪金收入总税超过1600元者应缴纳个人所得税。
收入总额减去免征基数后剩余部分称为应纳税所得额,应纳税所得额按下表规定的超额累进税率计算应缴纳的个人所得税
级别 应纳税所得额 税率%
1 不超过500元的 5
2 超过500元至2000元的部分 10
3 超过2000元至5000元的部分 15
4 超过5000元至20000元的部分 20
5 超过20000元的部分 25
例如:张三某月总收入4300元,减去免征基数1600元,则应纳税所得额为2700元。
2700元符合1,2,3级纳税标准,故张三本月总收入应纳税总额由三部分组成:
不超过500元的部分为500元,按5%税率计算应纳税25元;
而500元至2000元的部分为1500元,按10%的税率计算应纳税150元;
超过2000元的部分为2700-2000=700元,按15%税率计算应纳税105元,
三者之和为25元+150元+105元=280元
*/
class TaxCalculator {
public static final int BASE = 1600;
private static final int[][] TAX_BRACKETS = {
{500, 5},
{2000, 10},
{5000, 15},
{20000, 20},
{Integer.MAX_VALUE, 25},
};
public static double findTax(int rawIncome) {
if (rawIncome < 0 || rawIncome <= BASE) {
return 0;
}
int income = rawIncome - BASE;
double tax = 0;
int pre = 0;
for (int[] bracket : TAX_BRACKETS) {
int incomeLimit = bracket[0];
int rate = bracket[1];
tax += (min(incomeLimit, income) - pre ) * (rate / 100.0) ;
if (income <= incomeLimit) {
break;
}
pre = incomeLimit;
}
return tax;
}
private static int min(int x, int y) {
return x < y ? x : y;
}
}
/**实例2
成绩等级
*/
class Grade {
private static final double[] REMARK = {50.0, 65.0, 75.0, 90.0, 100.0};
private static final String[] GRADE = {"F", "D", "C", "B", "A"}; //maybe enum is better
//略去参数合法性检查
public static final String findGrade(double remark) {
String grade = "A";
for (int i = 0, len = REMARK.length; i < len; i++) {
double remarkLimit = REMARK[i];
if (remark < remarkLimit) {
grade = GRADE[i];
break;
}
}
return grade;
}
}
分享到:
相关推荐
《软件测试的经验教训:一种情境驱动的方法》是一本专注于软件测试领域的著作,旨在分享作者们在实际工作中积累的宝贵经验和教训。这本书以英文撰写,采用Word格式,易于阅读和引用,为读者提供了一种深入理解软件...
Thoughtful Machine Learning with Python A Test-Driven Approach 英文无水印pdf 正式版 pdf使用FoxitReader和PDF-XChangeViewer测试可以打开
Android 6 for Programmers: An App-Driven Approach presents leading-edge mobile computing technologies for professional software developers. In our app-driven approach, we present concepts in complete ...
Thoughtful Machine Learning with Python: A Test-Driven Approach English | 25 Aug. 2016 | ISBN: 1491924136 | 250 Pages | AZW3/MOBI/EPUB/PDF (conv) | 16.77 MB By teaching you how to code machine-...
- A Test-Driven Approach(测试驱动方法):强调在编写代码之前先编写测试用例的软件开发方法,是一种确保代码质量、提高开发效率的实践方法。在机器学习中,测试驱动方法可以帮助确保算法的正确性和健壮性。 3. ...
基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-...
Title: Test- Driven Python Development Author: Siddharta Govindaraj Length: 300 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2015-03-31 ISBN-10: 1783987928 ISBN-13:...
- **书名**:“Thoughtful Machine Learning with Python: A Test-Driven Approach” - **作者**:Matthew Kirk - **出版年份**:2016年 - **出版社**:O’Reilly Media, Inc. 本书通过融合测试驱动开发(TDD)与机器...
标题:“iOS 8 for Programmers An App-Driven Approach 3rd”表明本书是面向程序员的,以应用程序为驱动方法介绍iOS 8操作系统,而且这是第三版,意味着之前已有两版内容的沉淀和技术更新。此书的命名暗示它涵盖...
### Modelling and Generating AJAX Applications: A Model-Driven Approach #### Introduction AJAX (Asynchronous JavaScript and XML) represents a significant shift in the way interactive web applications...
1. Spring 的 Annotation-Driven 配置事务管理器可以管理多个数据源的事务。 2. 在多数据源配置中,我们可以定义多个事务管理器,每个事务管理器对应一个数据源。 3. 使用 `@Transactional` 注解可以指定事务管理器...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际代码之前先编写测试用例。这种做法旨在提高代码质量、可维护性和减少缺陷。《Test-Driven Development By Example》是一本由...
"Datadriven1"可能代表这个库的一个特性,即数据驱动,意味着该库着重于处理、分析和利用数据来驱动决策或预测。而"0.0.1"则是版本号,表明这是该库的初始版本,可能包含了基本的功能和初步实现。 "nNeuron_pypi-...
在使用VMware vSphere 7.0时,可能会遇到虚拟机硬盘无法编辑或者无法连接到Profile-Driven Storage Service的问题。这种情况通常与存储配置、vSphere Client连接问题、虚拟机设置或者服务状态有关。以下是一些可能...
(Addison) MDA Explained--Model Driven Architecture, Practice & Promise.chm