回答編集履歴

5

追記

2019/04/15 07:29

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -31,3 +31,125 @@
31
31
  - 文字列化したいなら、Object#toStringメソッドをオーバーライドする必要がある。
32
32
 
33
33
  あるいは sum.getAsTon() などとして数量を獲得する。
34
+
35
+
36
+
37
+ 追記
38
+
39
+ ---
40
+
41
+ 解決したようなので、解いてみた。
42
+
43
+ ```Java
44
+
45
+ class Weight {
46
+
47
+ private final int gram;
48
+
49
+
50
+
51
+ Weight(int ton, int kiloGram, int gram) {
52
+
53
+ this(1_000_000 * ton + 1_000 * kiloGram + gram);
54
+
55
+ }
56
+
57
+ Weight(int gram) {
58
+
59
+ this.gram = gram;
60
+
61
+ }
62
+
63
+
64
+
65
+ Weight add(Weight other) {
66
+
67
+ return new Weight(this.gram + other.gram);
68
+
69
+ }
70
+
71
+
72
+
73
+ @Override
74
+
75
+ public String toString() {
76
+
77
+ int gram = this.gram;
78
+
79
+
80
+
81
+ int ton = gram / 1_000_000;
82
+
83
+ gram %= 1_000_000;
84
+
85
+
86
+
87
+ int kiloGram = gram / 1_000;
88
+
89
+ gram %= 1_000;
90
+
91
+
92
+
93
+ return String.format("%dt %dkg %dg", ton, kiloGram, gram);
94
+
95
+ }
96
+
97
+ }
98
+
99
+
100
+
101
+ class Main {
102
+
103
+ public static void main(String args[]) {
104
+
105
+ int[] tons = { 20, 30, 10, 20, 20};
106
+
107
+ int[] kiloGrams = {250, 780, 190, 360, 450};
108
+
109
+ int[] grams = {310, 400, 960, 210, 730};
110
+
111
+
112
+
113
+ int len = tons.length;
114
+
115
+ assert(
116
+
117
+ len == kiloGrams.length
118
+
119
+ && len == grams.length
120
+
121
+ );
122
+
123
+
124
+
125
+ var total = new Weight(0);
126
+
127
+ for(int i = 0; i < len; ++i) {
128
+
129
+ total = total.add(
130
+
131
+ new Weight(tons[i], kiloGrams[i], grams[i])
132
+
133
+ );
134
+
135
+ }
136
+
137
+
138
+
139
+ System.out.println(total);
140
+
141
+ }
142
+
143
+ }
144
+
145
+ ```
146
+
147
+
148
+
149
+ **実行結果** [Wandbox](https://wandbox.org/permlink/DElLsenX9cbvaW3A)
150
+
151
+ ```
152
+
153
+ 102t 32kg 610g
154
+
155
+ ```

4

追記

2019/04/15 07:29

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -1,6 +1,20 @@
1
1
  + など演算子の挙動を上書きすることを演算子オーバーロードと呼びますが、**Javaではできないです。**
2
2
 
3
3
  どうしてもやりたいなら sum = sum.add(w); で加算できるようにコードを組んでください。
4
+
5
+
6
+
7
+ > 回答を参考に以上のように修正してみたのですが、[4]番目の配列しか表示されませんでした.すべてのすべての配列を合計したのを表示したいのですがよくわかりません。
8
+
9
+
10
+
11
+ MyWeight#addの実装が間違っています。
12
+
13
+ どのような計算をしているのか、じっくり点検してみてください。
14
+
15
+
16
+
17
+ **ヒント: ** 0 + a = a
4
18
 
5
19
 
6
20
 

3

追記

2019/04/15 06:19

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -15,3 +15,5 @@
15
15
  - オブジェクトwを使いまわさない。一時オブジェクトで良いならforブロック内で生成する。
16
16
 
17
17
  - 文字列化したいなら、Object#toStringメソッドをオーバーライドする必要がある。
18
+
19
+ あるいは sum.getAsTon() などとして数量を獲得する。

2

修正

2019/04/15 05:28

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  - gramとkgramとtonを同じインスタンスに入れるのは意味が分からないです。
12
12
 
13
- グラムで一元管理して、必要なときだけ単位を換算すれば良い。
13
+ グラムで一元管理して、必要なときだけ単位を換算すれば良い。
14
14
 
15
15
  - オブジェクトwを使いまわさない。一時オブジェクトで良いならforブロック内で生成する。
16
16
 

1

追記

2019/04/15 05:25

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  - gramとkgramとtonを同じインスタンスに入れるのは意味が分からないです。
12
12
 
13
+ グラム数で一元管理して、必要なときだけ単位を換算すれば良い。
14
+
13
15
  - オブジェクトwを使いまわさない。一時オブジェクトで良いならforブロック内で生成する。
14
16
 
15
17
  - 文字列化したいなら、Object#toStringメソッドをオーバーライドする必要がある。