OO,拉钩上一个号称最难面试题目

来源:互联网 发布:网络型电力监测 编辑:程序博客网 时间:2024/05/22 06:06

看到了"解决拉钩上一个号称最难面试题目",随便写了个,看将来上班地点没有想去的就没传

1.裁判类

import java.util.ArrayList;import java.util.List;/** * Judge.java * @date 2014-5-7 */public class Judge {        private static Integer[] baseNumber = null;    private static String[] baseString = null;    private static List<Rule> rules = new ArrayList<Rule>();        public static void addRules(Rule ... rs){        for (Rule r : rs) {            rules.add(r);        }    }    public static String rule(int number) {        String result = Integer.toString(number);                for (Rule r : rules) {            String doRule = r.doRule(baseNumber, baseString, number);            if (doRule != null && !"".equals(doRule)) {//裁判发现这个规则符合了                result = doRule;            }        }        return result;    }        public static void setBaseNumber(Integer[] baseNumber) {        Judge.baseNumber = baseNumber;    }        public static void setBaseString(String[] baseString) {        Judge.baseString = baseString;    }}

2.规则接口

/** * Rule.java * @date 2014-5-7 */public interface Rule {    public String doRule(Integer[] baseNumber, String[] baseString, int number);}

3.学生

/** * Student.java * @date 2014-5-7 */public class Student {        public Student(int number) {        this.number = number;    }    private int number = 0;        public void numberOff() {        System.out.println(Judge.rule(number));    }}

4.程序入口

import java.util.Arrays;/** * Test.java * @date 2014-5-7 */public class Test {    public static void main(String[] args) {        //告诉裁判特殊数字和特殊数字所对应的字符        Judge.setBaseNumber(new Integer[] {3, 5, 7});        Judge.setBaseString(new String[] {"Fizz", "Buzz", "Whizz"});        //按照说明建了2个规则,因为规则5优先级高,所以先把放前面了,没有设定专门的规则字段        Rule[] rs = new Rule[] {new Rule() {            //规则5            public String doRule(Integer[] baseNumber, String[] baseString, int number) {                String numberStr = Integer.toString(number);                char[] charArray = numberStr.toCharArray();                int binarySearch = -1;                for (char c : charArray) {                    binarySearch = Arrays.binarySearch(baseNumber, Integer.valueOf(String.valueOf(c)));                    if (binarySearch >= 0) {                        break;                    }                }                if (binarySearch >= 0) {                    return baseString[binarySearch];                } else {                    return "";                }            }        }, new Rule() {            //规则3&4            public String doRule(Integer[] baseNumber, String[] baseString, int number) {                StringBuffer sb = new StringBuffer();                for (int i = 0, size = baseNumber.length; i < size; i++) {                    if (number % baseNumber[i].intValue() == 0) {                        sb.append(baseString[i]);                    }                }                return sb.toString();            }        }};        //告诉裁判有2个规则        Judge.addRules(rs);                //好了,同学们开始报数了。        for (int i = 1; i <= 100; i++) {            Student s = new Student(i);            s.numberOff();        }    }}


0 0
原创粉丝点击