%演算子を使わないとか、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); } } } }