LoginSignup
2

More than 5 years have passed since last update.

posted at

updated at

Organization

[Javaの小枝] JavaでPPAP

参加せざるを得ない

Ppap.java
public class Ppap {

    enum Word {
        pen, pinapple, apple;
        Word talk() {System.out.println("talk : " + this); return this;}
    }

    enum PpapState {
        initial {PpapState transition(Word word) {return word == Word.pen      ? p    : initial;}},
        p       {PpapState transition(Word word) {return word == Word.pinapple ? pp   : initial;}},
        pp      {PpapState transition(Word word) {return word == Word.apple    ? ppa  : initial;}},
        ppa     {PpapState transition(Word word) {return word == Word.pen      ? ppap : initial;}},
        ppap;
        PpapState transition(Word next) {throw new InternalError();}
    }

    public static void main(String[] args) {
        Random random = new Random();

        for (PpapState state = PpapState.initial; state != PpapState.ppap; ) {
            state = state.transition(Word.values()[random.nextInt(3)].talk());
        }
        System.out.println("finish : Pen Pinapple Apple Pen!");
    }

}

心掛けたこと

  • 状態遷移には、いかにも状態遷移を記述しているっぽいコードを使う
  • 話す単語と状態は別の enum で(これはhmhmshさんの前記事のコメントでも指摘されていたけど)
  • 一目でコードの挙動がわかるように書く

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
What you can do with signing up
2