fork download
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5.  
  6. IAnimalProvider provider = new AnimalProviderFactory().createProvider();
  7. Scanner scn = new Scanner(System.in);
  8.  
  9. String strAnimals = "(" + Utils.join(provider.names(),", ") + ")";
  10.  
  11. do {
  12. System.out.print("動物名を入力してください");
  13. System.out.println(strAnimals);
  14. System.out.print("> ");
  15. } while( listen(provider.find(scn.next()) ) );
  16. }
  17.  
  18. public static boolean listen(ISoundMaker sm){
  19. if( sm != null ){
  20. System.out.println(sm.makeSound());
  21. return true;
  22. }
  23. return false;
  24. }
  25.  
  26. public static class Utils {
  27. static String join(String[] ss, String sep ){
  28. String res = "";
  29. if( ss.length > 0 ){ res = ss[0]; }
  30. for( int i = 1; i < ss.length; i++ ){
  31. res += sep + ss[i];
  32. }
  33. return res;
  34. }
  35. }
  36.  
  37. static class AnimalProviderFactory {
  38. public AnimalProviderFactory(){}
  39. public IAnimalProvider createProvider(){
  40. return new SimpleAnimalProvider( new IAnimal[] {
  41. new SimpleAnimal("いぬ","わおーん")
  42. , new SimpleAnimal("ねこ","にゃおーん")
  43. , new SimpleAnimal("らいおん","がおーん")
  44. , new SimpleAnimal("うし","もおーん")
  45. , new UtyuuTeikokuHei("A","宇宙和平連合軍が何の用だ。この惑星は、我々が先に目を付けた惑星だぞ")
  46. , new UtyuuTeikokuHei("B","大人しく身を引いた方が身の為だぞ。さもなくば、命の保証はない!")
  47. , new UtyuuTeikokuHei("C","お前たちは、おとなしく宇宙のゴミ掃除でもしておけよ。はははは!")
  48. });
  49. }
  50. }
  51.  
  52.  
  53. static interface ISoundMaker {
  54. public String makeSound();
  55. }
  56.  
  57. static interface INamedOne {
  58. public String getName();
  59. }
  60.  
  61. static interface IAnimal
  62. extends ISoundMaker, INamedOne {}
  63.  
  64. static interface IAnimalProvider {
  65. public IAnimal find(String s);
  66. public String[] names();
  67. }
  68.  
  69. static class SimpleAnimal implements IAnimal {
  70. private String mName;
  71. private String mSound;
  72. public SimpleAnimal(String name, String sound){
  73. mSound = sound;
  74. mName = name;
  75. }
  76. public String makeSound(){ return mSound; }
  77. public String getName(){ return mName; }
  78. }
  79.  
  80. static class UtyuuTeikokuHei implements IAnimal {
  81. IAnimal mAnimDel;
  82. UtyuuTeikokuHei(String id, String serief){
  83. mAnimDel = new SimpleAnimal("宇宙帝国兵"+id,"「"+serief+"」\nクルッ");
  84. }
  85. public String getName(){ return mAnimDel.getName(); }
  86. public String makeSound(){ return mAnimDel.makeSound(); }
  87. }
  88.  
  89. static class SimpleAnimalProvider implements IAnimalProvider {
  90. IAnimal[] mAnimalArray;
  91. String[] mCachedNames;
  92. public SimpleAnimalProvider(IAnimal[] arr){
  93. mAnimalArray = arr;
  94. mCachedNames = new String[mAnimalArray.length];
  95. for( int i = 0; i < mAnimalArray.length; i++ ){
  96. mCachedNames[i] = mAnimalArray[i].getName();
  97. }
  98. }
  99. public IAnimal find(String s){
  100. for( IAnimal animal: mAnimalArray ){
  101. if( animal.getName().equals(s) ){
  102. return animal;
  103. }
  104. }
  105. return null;
  106. }
  107. public String[] names(){
  108. return java.util.Arrays.copyOf(mCachedNames,mCachedNames.length);
  109. }
  110. }
  111. }
Success #stdin #stdout 0.1s 380864KB
stdin
いぬ
らいおん
宇宙帝国兵C
q
stdout
動物名を入力してください(いぬ, ねこ, らいおん, うし, 宇宙帝国兵A, 宇宙帝国兵B, 宇宙帝国兵C)
> わおーん
動物名を入力してください(いぬ, ねこ, らいおん, うし, 宇宙帝国兵A, 宇宙帝国兵B, 宇宙帝国兵C)
> がおーん
動物名を入力してください(いぬ, ねこ, らいおん, うし, 宇宙帝国兵A, 宇宙帝国兵B, 宇宙帝国兵C)
> 「お前たちは、おとなしく宇宙のゴミ掃除でもしておけよ。はははは!」
クルッ
動物名を入力してください(いぬ, ねこ, らいおん, うし, 宇宙帝国兵A, 宇宙帝国兵B, 宇宙帝国兵C)
>