%演算子を使わないとか、for文を使わないとか4通りのやり方で。
%演算子を使わないとか、for文を使わないとか4通りのやり方で。
/** 1〜50の数字でFizzBuzzやる。** ルール* 1〜50の数字を総なめし* 3で割り切れる数字->Fizz* 5で割り切れる数字->Buzz* 3と5のどちらでも割り切れる数字->FizzBuzz* それ以外の場合は数字をそのまま出力する。** 実行結果* 1* 2* Fizz* 4* Buzz* Fizz* 7* 8* Fizz* 以下略**/public class FizzBuzz {private static final int NUM_BGN = 1;private static final int NUM_END = 50;public static void main(String[] args) {System.out.println("FizzBuzzやるよー^q^");System.out.println("--基本--");std();System.out.println("--ループ使わない--");recursive(NUM_BGN);System.out.println("--%演算子使わない--");unuseMod();System.out.println("--ヘソ曲がり用--");dataTable();}private static void std() {// スタンダード版for (int i = NUM_BGN; i <= NUM_END; i++) {if (i % 15 == 0) { // 3でも5でも割り切れるのは15の倍数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);}}}private static void recursive(int i) {// ループを使わない版。if (i <= NUM_END) {if (i % 15 == 0) { // 3でも5でも割り切れるのは15の倍数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);}recursive(i+1);}}private static void unuseMod() {// %演算子を使わない版。// 3で割った答えに3を掛け算し、検算の結果// 元の数字に復元できた場合は// 3の倍数ということになります。for (int i = NUM_BGN; i <= NUM_END; i++) {if (i / 15 * 15 == i) {System.out.println("FizzBuzz");} else if (i / 3 * 3 == i) {System.out.println("Fizz");} else if (i / 5 * 5 == i) {System.out.println("Buzz");} else {System.out.println(i);}}}private static void dataTable() {// 倍数というものは同じ周期で繰り返される(3と5のFizzBuzzの場合// 1〜15までのパターンを延々と繰り返す)ため、1〜15までをデータテーブル化。final String[] tbl = {null,null,"Fizz",null,"Buzz","Fizz",null,null,"Fizz","Buzz",null,"Fizz",null,null,"FizzBuzz"};for (int i = NUM_BGN; i <= NUM_END; i++) {int idx = (i-1) % 15;if (tbl[idx] != null) {System.out.println(tbl[idx]);} else {System.out.println(i);}}}}