题目描述,给一个数n(n>1)。从1~n-1,打印该数字,并且,如果该数字能被3整除,打印Fizz;如果能被5整除,打印Buzz,如果能被15整除,打印FizzBuzz。
传统的写法一般是一个for循环里面嵌套4个if else判断。能写到这个水平算是合格了。但使用面向对象会有更好的分数。我的解法如下(java版本):
public class FizzBuzz{
private String [] state={"","","","Fizz","","Buzz"};
private String getState(int n, int base){
if(n % base == 0)return state[base];
return "";
}
public void printOnRange(final int bound){
for(int i=1;i < bound;i++){
System.out.println( i+ " "+ getState(i,3) + getState(i,5));
}
}
public static void main(String[] args){
new FizzBuzz().printOnRange(101);
}
}
这里用到了私有变量,私有方法,公开方法,匿名对象等特性。但也存在一个bug, 如果数字i不是3,5,15的倍数,会打印出空格。 但从输出结果上看不出来。就不改了。