回答編集履歴

1

Mapを使った書き方

2015/11/10 04:25

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -5,3 +5,89 @@
5
5
  コンパイル段階でこのメソッドにこれらの値しか渡らないことは保証できません。
6
6
 
7
7
  返り値をintで指定している以上、何も値を返さずに(または、例外を発生させずに)メソッドを終了することはできないので、エラーになってしまうのです。
8
+
9
+
10
+
11
+ この仕様だったらMapを使ったほうが簡潔に書ける気がします。
12
+
13
+ ```java
14
+
15
+ class CoinCase{
16
+
17
+ private Map<Integer, Integer> coins;
18
+
19
+
20
+
21
+ public CoinCase(){
22
+
23
+ coins = new HashMap<Integer, Integer>();
24
+
25
+ coins.put(1, 0);
26
+
27
+ coins.put(5, 0);
28
+
29
+ coins.put(10, 0);
30
+
31
+ coins.put(50, 0);
32
+
33
+ coins.put(100, 0);
34
+
35
+ coins.put(500, 0);
36
+
37
+ }
38
+
39
+
40
+
41
+ void addCoins(int x, int y){
42
+
43
+ if(!coins.containsKey(x)) return; //あるいは例外をスロー
44
+
45
+ coins.put(x, coins.get(x) + y);
46
+
47
+ }
48
+
49
+
50
+
51
+ int getCount(int x){
52
+
53
+ Integer temp = coins.get(x);
54
+
55
+ return temp != null ? temp.intValue() : 0;
56
+
57
+ //Java8なら次の1文で可能
58
+
59
+ //return coins.getOrDefault(x, 0);
60
+
61
+ }
62
+
63
+
64
+
65
+ int getAmount(){
66
+
67
+ //Java7以前
68
+
69
+ int result = 0;
70
+
71
+ for(Map.Entry<Integer, Integer> e : coins.entrySet()){
72
+
73
+ result += e.getKey() * e.getValue();
74
+
75
+ }
76
+
77
+ return result;
78
+
79
+
80
+
81
+ //Java8ならこう書ける
82
+
83
+ //return coins.entrySet().stream()
84
+
85
+ // .mapToInt(x -> x.getKey() * x.getValue())
86
+
87
+ // .sum();
88
+
89
+ }
90
+
91
+ }
92
+
93
+ ```