Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.09 KB | None | 0 0
  1. public class FizzBuzz {
  2. private final List<Fizzer> fizzers;
  3.  
  4. private static class Fizzer {
  5. private final String name;
  6. private final int divisor;
  7.  
  8. private Fizzer(String name, int divisor) {
  9. this.name = name;
  10. this.divisor = divisor;
  11. }
  12. }
  13.  
  14. public static class Builder {
  15. private final List<Fizzer> fizzers = new ArrayList<>();
  16.  
  17. public Builder add(String name, int divisor) {
  18. fizzers.add(new Fizzer(name, divisor));
  19. return this;
  20. }
  21.  
  22. public FizzBuzz build() {
  23. return new FizzBuzz(this);
  24. }
  25. }
  26.  
  27. private FizzBuzz(Builder builder) {
  28. fizzers = Collections.unmodifiableList(builder.fizzers);
  29. }
  30.  
  31. public String getValue(int num) {
  32. String output = "";
  33. for (Fizzer fizzer : fizzers) {
  34. if (num % fizzer.divisor == 0) {
  35. output += fizzer.name;
  36. }
  37. }
  38. return output.isEmpty() ? Integer.toString(num) : output;
  39. }
  40.  
  41. public static Builder builder() {
  42. return new Builder();
  43. }
  44. }
  45.  
  46. import static java.util.stream.IntStream.rangeClosed;
  47.  
  48. class FizzBuzzDemo {
  49. public static void main(String[] args) {
  50. FizzBuzz fizzBuzz = FizzBuzz.builder().add("Fizz", 3).add("Buzz", 5).build();
  51. rangeClosed(1, 100).mapToObj(fizzBuzz::getValue).forEach(System.out::println);
  52. }
  53. }
  54.  
  55. import org.junit.Test;
  56.  
  57. import static org.junit.Assert.assertEquals;
  58.  
  59. public class FizzBuzzTest {
  60. @Test
  61. public void test_Without_Fizzer() {
  62. FizzBuzz fizzBuzz = FizzBuzz.builder().build();
  63. assertEquals("1", fizzBuzz.getValue(1));
  64. assertEquals("2", fizzBuzz.getValue(2));
  65. assertEquals("3", fizzBuzz.getValue(3));
  66. assertEquals("4", fizzBuzz.getValue(4));
  67. assertEquals("5", fizzBuzz.getValue(5));
  68. assertEquals("15", fizzBuzz.getValue(15));
  69. assertEquals("16", fizzBuzz.getValue(16));
  70. assertEquals(Integer.toString(31 * 3 * 5), fizzBuzz.getValue(31 * 3 * 5));
  71. assertEquals(Integer.toString(31 * 3 * 5 + 1), fizzBuzz.getValue(31 * 3 * 5 + 1));
  72. }
  73.  
  74. @Test
  75. public void test_With_Fizz() {
  76. FizzBuzz fizzBuzz = FizzBuzz.builder().add("Fizz", 3).build();
  77. assertEquals("1", fizzBuzz.getValue(1));
  78. assertEquals("2", fizzBuzz.getValue(2));
  79. assertEquals("Fizz", fizzBuzz.getValue(3));
  80. assertEquals("4", fizzBuzz.getValue(4));
  81. assertEquals("5", fizzBuzz.getValue(5));
  82. assertEquals("Fizz", fizzBuzz.getValue(15));
  83. assertEquals("16", fizzBuzz.getValue(16));
  84. assertEquals("Fizz", fizzBuzz.getValue(31 * 3 * 5));
  85. assertEquals(Integer.toString(31 * 3 * 5 + 1), fizzBuzz.getValue(31 * 3 * 5 + 1));
  86. }
  87.  
  88. @Test
  89. public void test_With_FizzBuzz() {
  90. FizzBuzz fizzBuzz = FizzBuzz.builder().add("Fizz", 3).add("Buzz", 5).build();
  91. assertEquals("1", fizzBuzz.getValue(1));
  92. assertEquals("2", fizzBuzz.getValue(2));
  93. assertEquals("Fizz", fizzBuzz.getValue(3));
  94. assertEquals("4", fizzBuzz.getValue(4));
  95. assertEquals("Buzz", fizzBuzz.getValue(5));
  96. assertEquals("FizzBuzz", fizzBuzz.getValue(15));
  97. assertEquals("16", fizzBuzz.getValue(16));
  98. assertEquals("FizzBuzz", fizzBuzz.getValue(31 * 3 * 5));
  99. assertEquals(Integer.toString(31 * 3 * 5 + 1), fizzBuzz.getValue(31 * 3 * 5 + 1));
  100. }
  101.  
  102. @Test
  103. public void test_With_FizzBuzzJazz() {
  104. FizzBuzz fizzBuzz = FizzBuzz.builder().add("Fizz", 3).add("Buzz", 5).add("Jazz", 7).build();
  105. assertEquals("1", fizzBuzz.getValue(1));
  106. assertEquals("2", fizzBuzz.getValue(2));
  107. assertEquals("Fizz", fizzBuzz.getValue(3));
  108. assertEquals("4", fizzBuzz.getValue(4));
  109. assertEquals("Buzz", fizzBuzz.getValue(5));
  110. assertEquals("FizzBuzz", fizzBuzz.getValue(15));
  111. assertEquals("16", fizzBuzz.getValue(16));
  112. assertEquals("FizzBuzz", fizzBuzz.getValue(31 * 3 * 5));
  113. assertEquals(Integer.toString(31 * 3 * 5 + 1), fizzBuzz.getValue(31 * 3 * 5 + 1));
  114. assertEquals("FizzBuzzJazz", fizzBuzz.getValue(31 * 3 * 5 * 7));
  115. }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement