FizzBuzz/Java: Difference between revisions
< FizzBuzz
Content added Content deleted
No edit summary |
imported>Er2 (→Recursive: newline for readable output) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
===If/else ladder=== |
===If/else ladder=== |
||
<syntaxhighlight lang="java"> |
|||
<lang java>public class FizzBuzz{ |
|||
public class FizzBuzz{ |
|||
public static void main(String[] args){ |
public static void main(String[] args){ |
||
for(int i= 1; i <= 100; i++){ |
for(int i= 1; i <= 100; i++){ |
||
Line 16: | Line 17: | ||
} |
} |
||
} |
} |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
===Concatenation=== |
===Concatenation=== |
||
<lang java>public class FizzBuzz{ |
|||
<syntaxhighlight lang="java"> |
|||
public class FizzBuzz{ |
|||
public static void main(String[] args){ |
public static void main(String[] args){ |
||
for(int i= 1; i <= 100; i++){ |
for(int i= 1; i <= 100; i++){ |
||
Line 29: | Line 33: | ||
} |
} |
||
} |
} |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
===Ternary operator=== |
===Ternary operator=== |
||
<syntaxhighlight lang="java"> |
|||
<lang java>public class FizzBuzz{ |
|||
public class FizzBuzz{ |
|||
public static void main(String[] args){ |
public static void main(String[] args){ |
||
for(int i= 1; i <= 100; i++){ |
for(int i= 1; i <= 100; i++){ |
||
Line 38: | Line 44: | ||
} |
} |
||
} |
} |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
===Recursive=== |
===Recursive=== |
||
<lang java>public String fizzBuzz(int n){ |
|||
<syntaxhighlight lang="java"> |
|||
public String fizzBuzz(int n){ |
|||
String s = ""; |
String s = ""; |
||
if (n == 0) |
if (n == 0) |
||
Line 50: | Line 59: | ||
if (s.equals("")) |
if (s.equals("")) |
||
s = n + ""; |
s = n + ""; |
||
return fizzBuzz(n-1) + s; |
return fizzBuzz(n-1) + "\n" + s; |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
===Alternative Recursive=== |
===Alternative Recursive=== |
||
<lang java>public String fizzBuzz(int n){ |
|||
<syntaxhighlight lang="java"> |
|||
public String fizzBuzz(int n){ |
|||
return (n>0) ? fizzBuzz(n-1) + |
return (n>0) ? fizzBuzz(n-1) + |
||
(n % 15 != 0? n % 5 != 0? n % 3 != 0? (n+"") :"Fizz" : "Buzz" : "FizzBuzz") |
(n % 15 != 0? n % 5 != 0? n % 3 != 0? (n+"") :"Fizz" : "Buzz" : "FizzBuzz") |
||
: ""; |
: ""; |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
=== Using an array === |
=== Using an array === |
||
<lang java>class FizzBuzz { |
|||
<syntaxhighlight lang="java"> |
|||
class FizzBuzz { |
|||
public static void main( String [] args ) { |
public static void main( String [] args ) { |
||
for( int i = 1 ; i <= 100 ; i++ ) { |
for( int i = 1 ; i <= 100 ; i++ ) { |
||
Line 65: | Line 82: | ||
} |
} |
||
} |
} |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
===Lambda with Arrays=== |
===Lambda with Arrays=== |
||
<lang java>class FizzBuzz { |
|||
<syntaxhighlight lang="java"> |
|||
class FizzBuzz { |
|||
public static void main( String [] args ) { |
public static void main( String [] args ) { |
||
int [] x = new int [100]; |
int [] x = new int [100]; |
||
Arrays.setAll(x, j -> j |
Arrays.setAll(x, j -> j); |
||
Arrays.stream(x).forEach(i -> { |
Arrays.stream(x).forEach(i -> { |
||
if(i == 0) return; |
if(i == 0) return; |
||
Line 81: | Line 102: | ||
}); |
}); |
||
} |
} |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
===Lambda with Streams=== |
===Lambda with Streams=== |
||
<lang java>package fizzbuzz; |
|||
<syntaxhighlight lang="java"> |
|||
package fizzbuzz; |
|||
import static java.util.stream.IntStream.rangeClosed; |
import static java.util.stream.IntStream.rangeClosed; |
||
Line 105: | Line 129: | ||
; |
; |
||
} |
} |
||
} |
|||
}</lang> |
|||
</syntaxhighlight> |
|||
=== OO style === |
=== OO style === |
||
<lang java>public class FizzBuzz { |
|||
<syntaxhighlight lang="java"> |
|||
public class FizzBuzz { |
|||
public static void main(String[] args) { |
public static void main(String[] args) { |
||
Line 147: | Line 175: | ||
} |
} |
||
} |
|||
}</lang> |
|||
</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> |
Latest revision as of 04:30, 27 September 2023
FizzBuzz/Java is part of FizzBuzz. You may find other members of FizzBuzz at Category:FizzBuzz.
If/else ladder
public class FizzBuzz{
public static void main(String[] args){
for(int i= 1; i <= 100; i++){
if(i % 15 == 0){
System.out.println("FizzBuzz");
}else if(i % 3 == 0){
System.out.println("Fizz");
}else if(i % 5 == 0){
System.out.println("Buzz");
}else{
System.out.println(i);
}
}
}
}
Concatenation
public class FizzBuzz{
public static void main(String[] args){
for(int i= 1; i <= 100; i++){
String output = "";
if(i % 3 == 0) output += "Fizz";
if(i % 5 == 0) output += "Buzz";
if(output.equals("")) output += i;
System.out.println(output);
}
}
}
Ternary operator
public class FizzBuzz{
public static void main(String[] args){
for(int i= 1; i <= 100; i++){
System.out.println(i % 15 != 0 ? i % 5 != 0 ? i % 3 != 0 ?
i : "Fizz" : "Buzz" : "FizzBuzz");
}
}
}
Recursive
public String fizzBuzz(int n){
String s = "";
if (n == 0)
return s;
if((n % 5) == 0)
s = "Buzz" + s;
if((n % 3) == 0)
s = "Fizz" + s;
if (s.equals(""))
s = n + "";
return fizzBuzz(n-1) + "\n" + s;
}
Alternative Recursive
public String fizzBuzz(int n){
return (n>0) ? fizzBuzz(n-1) +
(n % 15 != 0? n % 5 != 0? n % 3 != 0? (n+"") :"Fizz" : "Buzz" : "FizzBuzz")
: "";
}
Using an array
class FizzBuzz {
public static void main( String [] args ) {
for( int i = 1 ; i <= 100 ; i++ ) {
System.out.println( new String[]{ i+"", "Fizz", "Buzz", "FizzBuzz" }[ ( i%3==0?1:0 ) + ( i%5==0?2:0 ) ]);
}
}
}
Lambda with Arrays
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;
String output = "";
if(i % 3 == 0) output += "Fizz";
if(i % 5 == 0) output += "Buzz";
if(output.equals("")) output += i;
System.out.println(output);
});
}
}
Lambda with Streams
package fizzbuzz;
import static java.util.stream.IntStream.rangeClosed;
public interface FizzBuzz {
public static void main(String... arguments) {
rangeClosed(1, 100)
.mapToObj(i -> {
if (i % (3 * 5) == 0) {
return "FizzBuzz";
} else if (i % 3 == 0) {
return "Fizz";
} else if (i % 5 == 0) {
return "Buzz";
} else {
return Integer.toString(i);
}
})
.forEach(System.out::println)
;
}
}
OO style
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);
}
}
}
Enum-based Declarative
With Functional and OO elements
A new rule can be added by adding a single line.
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);
}
}