好久没有写过东西了,最近正在看agile java (测试驱动开发)这本书,其开发思想方面的不再细说,下面这个是前两天在QQ群里的群友求助的——等比数列前N项和的算法,根据测试驱动开发的思想,写了这个方法,但我知道还有很多不足之处,请高手多多指教,谢谢!

一、先看测试类ComparesTest代码:

import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class ComparesTest { private Compares compares; static final double ACTUAL = 0.05; @Before public void setUp() { compares = new Compares(); } @Test public void testFactorial() { Assert.assertEquals(4, compares.getFactorial(2, 2)); } @Test public void testCompareSum() { int n = compares.getCompareSum(5, 2, 5); System.err.println(n); System.err.println(compares.getCompareSum(0.5,0.5, 5)); Assert.assertEquals(315, n, ACTUAL); } @Test public void testSum() { System.err.println(compares.getCompareSum(2, 5)); Assert.assertEquals(3, compares.getCompareSum(2, 1)); } }

二、计算等比数列类Compares代码:

/** * 求等比数列及其前n项和 * @author lei public class Compares { /** * 一个浮点数的n次方 * * @param num * @param n * @return */ public double getFactorial(double num, int n) { if (num == 0) return 0.0; if (n < 0) return -1; return n > 0 ? num * getFactorial(num, n-1) : 1; } /** * 一个整数的n次方 * * @param num * @param n * @return */ public int getFactorial(int num, int n) { if (num == 0) return 0; if (n < 0) return -1; return n > 0 ? num * getFactorial(num, n-1) : 1; } /** * 等比数列前n项和,系数和比例都为浮点数 * * @param coefficient * 系数 * @param proportion * 比例 * @param n * 项数 * @return */ public double getCompareSum(double coefficient, double proportion, int n) { return coefficient * getCompareSum(proportion,n); } /** * 等比数列前n项和 系数为浮点数 * * @param coefficient * 系数 * @param proportion * 比例 * @param n * 项数 * @return */ public double getCompareSum(double coefficient, int proportion, int n) { return coefficient * getCompareSum(proportion,n); } /** * 等比数列前n项和 系数和比例都为整数 * * @param coefficient * 系数 * @param proportion * 比例 * @param n * 项数 * @return */ public int getCompareSum(int coefficient, int proportion, int n) { return coefficient * getCompareSum(proportion,n); } /** * 等比数列前n项和,系数为1 * @param p 比例为整数 * @param n 前n项 * @return */ public int getCompareSum(int p, int n) { if (p == 0) return 0; if (n < 0) return -1; return n > 0 ? getCompareSum(p, n-1) + getFactorial(p, n) : 1; } /** * 等比数列前n项和,系数为1 * @param p 比例为整数 * @param n 前n项 * @return */ public double getCompareSum(double p, int n) { if (p == 0) return 0; if (n < 0) return -1; return n > 0 ? getCompareSum(p, n-1) + getFactorial(p, n) : 1; } }

感觉Compares这个类还不是太简洁,但是个人现在重构能力有限,暂时只能到此了,愿听高人指教!

java求等比数列求和_agile java 等比数列求和相关推荐

  1. java求约数_[转载]Java求最大公约数与最小公倍数

    (看到一份不错的总结,拿来收着) 如果数a能被数b整除,a就叫做b的倍数,b就叫做作a的约数.约数和倍数都表示一个数与另一个数的关系,不能单独存在.如只能说16是某数的倍数,2是某数的约数,而不能孤立 ...

  2. java求面积_用Java做个计算长方形面积的程序(3)

    11.这是计算长方形的源代码可以直接在进行编译运行,希望大家从中能够获益良多. //载入Scanner类文件. //java.util.Scanner 是 Java5 的新特征,我们可以通过 Scan ...

  3. java stream实现分组BigDecimal求和,自定义分组求和

    前言 随着微服务的发展,越来越多的sql处理被放到java来处理,数据库经常会使用到对集合中的数据进行分组求和,分组运算等等. 那怎么样使用java的stream优雅的进行分组求和或运算呢? 一.准备 ...

  4. 【Java 8 新特性】Java 8 BigDecimal求和

    这里写自定义目录标题 带有 Lambda 表达式的 BigDecimal 求和 List 中 BigDecimal 求和 Array 中 BigDecimal 求和 Map 中 BigDecimal ...

  5. Java求1到100和的6种方式(运用不同语法)

    文章目录 1.For循环 2.递归.静态方法 3.类方法 4.等差数列求和公式 5.Stream求和API 6.反射 1.For循环 package sum1_100;/*** For*/ publi ...

  6. 年年有余之java求余的技巧集合

    背景 传说里玉皇大帝派龙王马上降雨到共光一带,龙王接到玉皇大帝命令,立马从海上调水,跑去共光施云布雨,但粗心又着急的龙王不小心把海里的鲸鱼随着雨水一起降落在了共光,龙王怕玉皇大帝责怪,灵机一动便声称他 ...

  7. Java求字符串中出现次数最多的字符

    Java求字符串中出现次数最多的字符  [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611      Java ...

  8. java求期望_Java 11的期望

    java求期望 过去的几年对Java世界一直是动荡不安的,在相当多的发行版中添加了各种各样的功能. 在开发人员社区中,人们逐渐意识到Java的开发速度不够快. 在最初的20年中,Java平台和Java ...

  9. java求1000内的水仙花数

    java求1000内的水仙花数 /*** java求1000内的水仙花数*/ public class Test29 {public static void main(String[] args) { ...

  10. java 整数变负数_年年有余之java求余的小技巧

    背景 传说里玉皇大帝派龙王马上降雨到共光一带,龙王接到玉皇大帝命令,立马从海上调水,跑去共光施云布雨,但粗心又着急的龙王不小心把海里的鲸鱼随着雨水一起降落在了共光,龙王怕玉皇大帝责怪,灵机一动便声称他 ...

最新文章

  1. 物联网兴起 嵌入式系统安全日益受关注
  2. 『cURL』curl: (6) Could not resolve host无法解析主机地址
  3. MySQL中文全文索引
  4. flutter 自定义 AppBar
  5. php发请求的方法,php发送http请求的几种方法
  6. java scanner字符串_Java Scanner toString()用法及代码示例
  7. 启动之后自己关闭_电脑一开都是广告,请问怎么永久关闭?
  8. 一个java源文件中可以声明多少个class与编译后会生成多少个字节码文件
  9. [css] 如何消除transition闪屏?
  10. CodeForces 771C Bear and Tree Jumps 树形DP
  11. java中dynamic_java中dynamic web project与web project 的区别 [转]
  12. python字符串查找的四种方法_Python中的字符串查找操作方法总结
  13. 【Java学习笔记之二十六】深入理解Java匿名内部类
  14. c语言中优先级队列_C ++中的优先级队列
  15. redis主从、哨兵、集群的区别
  16. Android高德地图点击大头针更换大头针图片
  17. PS制作马赛克效果、炫酷光线
  18. 在有滚动条的容器中指定(显示)滚动到某一子元素位置
  19. Jetson Nano开发套件安装
  20. java8中switch不能,switch 语句

热门文章

  1. 注册表:基本概念和reg文件
  2. 编译ffmpeg报错ffmpeg yasm not found, use --disable-yasm for a crippled build
  3. spider.php使用方法,phpspider爬虫框架怎么用
  4. 计算机考证要考PS吗
  5. 微信小程序下拉刷新不回弹
  6. python可以用于工业机器人编程与操作_如何实现工业机器人编程抓取
  7. 修改文件或文件夹的创建时间、修改时间、访问时间
  8. 多项式拟合(polyfit和polyval)
  9. vue插槽面试题_vue面试题总结
  10. 视频转图片,图片转视频 OpenCV-python实现