package com.mo.achievements;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpRequest;
/***
* 算法:打印1~n之间可以被3/5整除的数字,被3整除打印Fizz,被5整除打印Buzz
* @author admin
*/
public class Test{
public static void main(String hh[]){
Test s = new Test();
List newList = s.getNewList1(16);
System.out.println(newList);
}
/**
* 简单实现算法一:
* @param n
* @return 处理好后的集合
*
* 评价:算法简单实现了需求,但可以发现,
* 代码并不满足java开发规范的单一职责原则:
* 即处理数据,又包含了对数据的存储返回
* 并且扩展性一般,若果想要改变返回的字符串儿
* 还需要修改大量代码
*/
public List getNewList (final int n) {
List<String> list = new ArrayList<String>();
for (int i = 1; i < n; i++) {
if ( i%15 == 0 ) {
list.add ( "Fizz+Buzz" );
} else if ( i%3 == 0 ) {
list.add("_3Fizz");
} else if ( i%5 == 0 ) {
list.add("_5Buzz");
} else {
list.add(Integer.toString(i));
}
}
return list;
}
/**
* 对算法抽象建模
* @param divisor 被除数
* @param i 当前值
* @param returnStr 返回数据串儿
* @return
*/
public String controlNumber ( final int divisor ,
final int i ,
final String returnStr ) {
return i%divisor == 0 ? returnStr : "";
}
/**
* 抽象后的新方法块儿
* @param n
* @return
*/
public List getNewList1 (final int n) {
List<String> list = new ArrayList<String>();
for (int i = 1; i < n; i++) {
final String returnStr = controlNumber( 3, i, "Fizz" ) + controlNumber( 5, i, "Buzz" );
if (StringUtils.isBlank(returnStr)) {
list.add(Integer.toString(i));
} else {
list.add(returnStr);
}
}
return list;
}
}
网友评论