Skip to content

Instantly share code, notes, and snippets.

@osamutake
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save osamutake/eef52076810a996831c6 to your computer and use it in GitHub Desktop.
Save osamutake/eef52076810a996831c6 to your computer and use it in GitHub Desktop.
http://bufferings.hatenablog.com/entry/2015/05/06/000943 で紹介されていた「手続き型で典型的」かつ、かなりアレなコードを自分なりにリファクタリングしてみました。
public Result execute(Input in) {
Result result = new Result();
List<Integer> coins2 = new ArrayList<>();
int sum = 0;
try {
if (in.getSelected() != null && in.getSelected() > 0 && in.getSelected() < 11) {
if (in.getCoins() != null && in.getCoins().size() > 0 && in.getCoins().size() < 101) {
sum = 0;
for (Integer coin : in.getCoins()) {
if (coin == 1) {
sum += 0;
coins2.add(coin);
} else if (coin == 5) {
sum += 0;
coins2.add(coin);
} else if (coin == 10) {
sum += 10;
} else if (coin == 50) {
sum += 50;
} else if (coin == 100) {
sum += 100;
} else if (coin == 500) {
sum += 500;
}
}
Product product = dao.findById(in.getSelected());
if (product == null) {
result = new Result();
result.setCoins(in.getCoins());
result.setProduct(null);
} else if (product.getPrice() < sum) {
result.setProduct(product);
sum -= product.getPrice();
List<Integer> coins3 = new ArrayList<>();
coins3.add(500);
coins3.add(100);
coins3.add(50);
coins3.add(10);
for (Integer coin : coins3) {
while (sum > coin) {
coins2.add(coin);
sum -= coin;
}
}
result.setCoins(coins2);
} else {
result = new Result();
result.setCoins(in.getCoins());
result.setProduct(null);
}
} else {
throw new IllegalArgumentException();
}
} else {
throw new IllegalArgumentException();
}
} catch (Exception e) {
LOG.error(e);
result = new Result();
result.setCoins(in.getCoins());
result.setProduct(null);
}
return result;
}
@osamutake
Copy link
Author

編集履歴についてのコメントは http://dora.bk.tsukuba.ac.jp/~takeuchi/?プログラミング%2F作法%2FHello.java にあります。

Mitsuyuki.Shiiba さんのオリジナルのコードが Gist 上に https://gist.github.com/bufferings/9414995751687177e882 としてあるのですが、特定のリビジョンから Fork する方法が解らず、コピペで新しい Gist を作ることになってしまいました。たぶん間違った方法なんだと思うのですが、どうもすみません。

ここからも解るように、私は Gist も、実は Java もあまりよく分かっていません。普段は Ruby とか JavaScript とか C# とか良く書いてます。Java のコンパイル環境もないので、タイプミスについてもご容赦下さい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment