LoginSignup
5
4

More than 5 years have passed since last update.

ifもswitchも三項演算子も剰余もforもwhileもtryもその他色々使わずにJavaでFizzBuzz書いてみた

Posted at

そういや昔、思い付きで書いたけど公開してなかったので。

FizzBuzzナシナシです。

FizzBuzz.java
class FizzBuzz {

  public static void main(String... args) {
    Link start;
    Link link = start = new Link(new N());   // 1
    link.setNext(link = new Link(new N()));  // 2
    link.setNext(link = new Link(new F()));  // 3
    link.setNext(link = new Link(new N()));  // 4
    link.setNext(link = new Link(new B()));  // 5
    link.setNext(link = new Link(new F()));  // 6
    link.setNext(link = new Link(new N()));  // 7
    link.setNext(link = new Link(new N()));  // 8
    link.setNext(link = new Link(new F()));  // 9
    link.setNext(link = new Link(new B()));  // 10
    link.setNext(link = new Link(new N()));  // 11
    link.setNext(link = new Link(new F()));  // 12
    link.setNext(link = new Link(new N()));  // 13
    link.setNext(link = new Link(new N()));  // 14
    link.setNext(link = new Link(new FB())); // 15
    link.setNext(start);
    loop(start, 1);
  }

  public static void loop(Link link, int i) {
    link.getProc().proc(i);
    new Flow[]{new Loop(), new Loop(), new Loop(), new Stop()}[String.valueOf(i).length()].flow(link.getNext(), i + 1);
  }

  static class Link {
    Proc proc;
    Link next;

    public Link(Proc proc) {
      this.proc = proc;
    }

    public Proc getProc() {
      return this.proc;
    }

    public Link getNext() {
      return this.next;
    }

    public void setNext(Link next) {
      this.next = next;
    }
  }

  static interface Proc {
    void proc(int i);
  }

  static class N implements Proc {
    public void proc(int i) {
      System.out.println(i);
    }
  }

  static class F implements Proc {
    public void proc(int i) {
      System.out.println("Fizz");
    }
  }

  static class B implements Proc {
    public void proc(int i) {
      System.out.println("Buzz");
    }
  }

  static class FB implements Proc {
    public void proc(int i) {
      System.out.println("FizzBuzz");
    }
  }

  static interface Flow {
    void flow(Link link, int i);
  }

  static class Loop implements Flow {
    public void flow(Link link, int i) {
      loop(link, i);
    }
  }

  static class Stop implements Flow {
    public void flow(Link link, int i) {
    }
  }
}

出力が15周期になることを無限リンクリストで表現したり、100で停止するようにするために現在のループ回数を文字列に変換して、3文字になったところで停めるようにしています。

みなさんはこんなヒドいJavaは書かないでくださいね。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4