经典面试题--FizzBuzz的面向对象版本

题目描述,给一个数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的倍数,会打印出空格。 但从输出结果上看不出来。就不改了。 

你可能感兴趣的:(FizzBuzz,fizz,fizzbizz,bizz)