FizzBuzz/Java: Difference between revisions

→‎Recursive: newline for readable output
({{collection|FizzBuzz}})
 
imported>Er2
(→‎Recursive: newline for readable output)
 
(8 intermediate revisions by 3 users not shown)
Line 2:
 
===If/else ladder===
<syntaxhighlight lang="java">
<lang java>public class FizzBuzz{
public class FizzBuzz{
public static void main(String[] args){
for(int i= 1; i <= 100; i++){
Line 16 ⟶ 17:
}
}
}
}</lang>
</syntaxhighlight>
 
===Concatenation===
 
<lang java>public class FizzBuzz{
<syntaxhighlight lang="java">
public class FizzBuzz{
public static void main(String[] args){
for(int i= 1; i <= 100; i++){
Line 29 ⟶ 33:
}
}
}
}</lang>
</syntaxhighlight>
===Ternary operator===
<syntaxhighlight lang="java">
<lang java>public class FizzBuzz{
public class FizzBuzz{
public static void main(String[] args){
for(int i= 1; i <= 100; i++){
Line 38 ⟶ 44:
}
}
}
}</lang>
</syntaxhighlight>
===Recursive===
 
<lang java>public String fizzBuzz(int n){
<syntaxhighlight lang="java">
public String fizzBuzz(int n){
String s = "";
if (n == 0)
Line 50 ⟶ 59:
if (s.equals(""))
s = n + "";
return fizzBuzz(n-1) + "\n" + s;
}
}</lang>
</syntaxhighlight>
 
===Alternative Recursive===
 
<lang java>public String fizzBuzz(int n){
<syntaxhighlight lang="java">
public String fizzBuzz(int n){
return (n>0) ? fizzBuzz(n-1) +
(n % 15 != 0? n % 5 != 0? n % 3 != 0? (n+"") :"Fizz" : "Buzz" : "FizzBuzz")
: "";
}
}</lang>
</syntaxhighlight>
 
=== Using an array ===
 
<lang java>class FizzBuzz {
<syntaxhighlight lang="java">
class FizzBuzz {
public static void main( String [] args ) {
for( int i = 1 ; i <= 100 ; i++ ) {
Line 65 ⟶ 82:
}
}
}
}</lang>
</syntaxhighlight>
 
 
===Lambda with Arrays===
 
<lang java>class FizzBuzz {
<syntaxhighlight lang="java">
class FizzBuzz {
public static void main( String [] args ) {
int [] x = new int [100];
Arrays.setAll(x, j -> j++);
Arrays.stream(x).forEach(i -> {
if(i == 0) return;
Line 81 ⟶ 102:
});
}
}
}</lang>
</syntaxhighlight>
 
===Lambda with Streams===
 
<lang java>package fizzbuzz;
<syntaxhighlight lang="java">
package fizzbuzz;
 
import static java.util.stream.IntStream.rangeClosed;
Line 102 ⟶ 126:
}
})
.forEach(s -> System.out.::println(s))
;
}
}
}</lang>
</syntaxhighlight>
 
 
=== OO style ===
 
<syntaxhighlight lang="java">
public class FizzBuzz {
 
public static void main(String[] args) {
Sound sound = new Sound(3, "Fizz", new Sound(5, "Buzz"));
for (int i = 1; i <= 100; i++) {
System.out.println(sound.generate(i));
}
}
 
private static class Sound {
private final int trigger;
private final String onomatopoeia;
private final Sound next;
 
public Sound(int trigger, String onomatopoeia, Sound next) {
this.trigger = trigger;
this.onomatopoeia = onomatopoeia;
this.next = next;
}
 
public Sound(int trigger, String sound) {
this(trigger, sound, null);
}
 
public String generate(int i) {
StringBuilder sb = new StringBuilder();
generate(sb, i);
return sb.length() == 0 ? String.valueOf(i) : sb.toString();
}
private void generate(StringBuilder sb, int i) {
if (i % trigger == 0)
sb.append(onomatopoeia);
if (next != null)
next.generate(sb, i);
}
 
}
 
}
</syntaxhighlight>
 
 
=== Enum-based Declarative ===
 
With Functional and OO elements
 
A new rule can be added by adding a single line.
 
<syntaxhighlight lang="java">
import java.util.Arrays;
import java.util.function.IntPredicate;
import java.util.stream.IntStream;
 
public enum FizzBuzz {
Fizz(divisibleBy(3)),
Buzz(divisibleBy(5));
 
private final IntPredicate test;
 
FizzBuzz(IntPredicate test) {
this.test = test;
}
 
static IntPredicate divisibleBy(int i) {
return n -> n % i == 0;
}
 
String applyRule(int n) {
if (test.test(n))
return name();
return "";
}
 
static String print(int i) {
String byRules = Arrays.stream(values())
.map(rule -> rule.applyRule(i))
.collect(Collectors.joining());
if (byRules.isEmpty())
return i + "";
return byRules;
}
 
public static void main(String[] args) {
IntStream.rangeClosed(1, 100)
.mapToObj(FizzBuzz::print)
.forEach(System.out::println);
}
}
 
</syntaxhighlight>
Anonymous user