回答編集履歴

2

あれ?

2019/05/14 12:17

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -203,3 +203,27 @@
203
203
 
204
204
 
205
205
  ちなみに、全部愚直に書いても問題があるわけではありません。
206
+
207
+
208
+
209
+ ---
210
+
211
+ 単純に仕様が理解できていないだけ?
212
+
213
+
214
+
215
+ > ➀クーポン持参:10%0ff
216
+
217
+ ➁平日割引:30%off
218
+
219
+ ➂平日シニア割引(65歳以上):50%off
220
+
221
+ ※2つ以上の割引サービスが重なった場合は、割引率が高い方が優先される。
222
+
223
+
224
+
225
+ の場合、クーポン持参で、平日で、60歳の人の割引率がどれになるか、わからない?
226
+
227
+ 10%offと50%offで、どちらが割引率が高いか、わからない?
228
+
229
+ 10%と10%offを同じものだと思っている?

1

こゆこと?

2019/05/14 12:17

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -39,3 +39,167 @@
39
39
  は、日本語の仕様を理解していただくか、
40
40
 
41
41
  デシジョンテーブルの読み方を理解するしかないです。
42
+
43
+
44
+
45
+ ---
46
+
47
+ ここから追記
48
+
49
+
50
+
51
+ こうゆうこと?
52
+
53
+ デシジョンテーブルを愚直に実装すると以下のようなif文になるはずで
54
+
55
+ ```java
56
+
57
+ if(coupon == 'Y' && weekday == 'Y' && age >= 65) {
58
+
59
+ // ルール列1
60
+
61
+ sale = "50%OFF";
62
+
63
+ }else if(coupon == 'Y' && weekday == 'Y' && age < 65) {
64
+
65
+ // ルール列2
66
+
67
+ sale = "30%OFF";
68
+
69
+ }else if(coupon == 'Y' && weekday != 'Y' && age >= 65) {
70
+
71
+ // ルール列3
72
+
73
+ sale = "10%OFF";
74
+
75
+ }else if(coupon == 'Y' && weekday != 'Y' && age < 65) {
76
+
77
+ // ルール列4
78
+
79
+ sale = "10%OFF";
80
+
81
+ }else if(coupon != 'Y' && weekday == 'Y' && age >= 65) {
82
+
83
+ // ルール列5
84
+
85
+ sale = "50%OFF";
86
+
87
+ }else if(coupon != 'Y' && weekday == 'Y' && age < 65) {
88
+
89
+ // ルール列6
90
+
91
+ sale = "30%OFF";
92
+
93
+ }else if(coupon != 'Y' && weekday != 'Y' && age >= 65) {
94
+
95
+ // ルール列7
96
+
97
+ sale = "割引なし";
98
+
99
+ }else if(coupon != 'Y' && weekday != 'Y' && age > 65) {
100
+
101
+ // ルール列8
102
+
103
+ sale = "割引なし";
104
+
105
+ }
106
+
107
+ ```
108
+
109
+ 上記がなぜ、単純なif文になるかわからないってことかな。
110
+
111
+ ```java
112
+
113
+ if(weekday =='Y' && age >=65){
114
+
115
+ sale="50%OFF";
116
+
117
+ } else if (weekday == 'Y'){
118
+
119
+ sale ='30%OFF";
120
+
121
+ } else if (coupon == 'Y'){
122
+
123
+ sale="10%OFF";
124
+
125
+ }
126
+
127
+ ```
128
+
129
+
130
+
131
+ > ※2つ以上の割引サービスが重なった場合は、割引率が高い方が優先される。
132
+
133
+
134
+
135
+ なので、割引率の高い順に適用されるかを判定します。※ここが、わからない?(A)
136
+
137
+
138
+
139
+ 50%の割引が適用されるルールは、列1と列5です。
140
+
141
+ if文で書くと
142
+
143
+ ```java
144
+
145
+ if((coupon == 'Y' && weekday == 'Y' && age >= 65) ||
146
+
147
+ (coupon != 'Y' && weekday == 'Y' && age >= 65)){
148
+
149
+ ```
150
+
151
+ coupon は、Yでもそれ以外でも、50%の割引率になることがわかるので ※ここが、わからない?(B)
152
+
153
+
154
+
155
+ ```java
156
+
157
+ if(weekday == 'Y' && age >= 65) {
158
+
159
+ ```
160
+
161
+ だけ判定すれば良い。※ここが、わからない?(C)
162
+
163
+ 50%の割引が適用されない場合、次に割引率が高いのは、30%なので、同様に ※ここが、わからない?(D)
164
+
165
+ ```java
166
+
167
+ }else if((coupon == 'Y' && weekday == 'Y' && age < 65) ||
168
+
169
+ (coupon != 'Y' && weekday == 'Y' && age < 65)) {
170
+
171
+ ```
172
+
173
+ となります。
174
+
175
+ 50%の割引のように考えると
176
+
177
+ ```java
178
+
179
+ if(weekday == 'Y' && age < 65) {
180
+
181
+ ```
182
+
183
+ と、なるのでは?と考えるかもしれませんが、`(weekday == 'Y' && age >= 65)`を事前にチェックしているので、
184
+
185
+ この分岐を通る場合 weekdayが'Y'でないか、age < 65 であるはずです。 ※ここが、わからない?(E)
186
+
187
+ ※age < 65を書いてもよいですが不要な記述を一般的にはイヤがります
188
+
189
+ それであれば、weekdayがYかを判定すれば、ageの判定は不要です。
190
+
191
+ なぜかというと、
192
+
193
+ weekdayがYであれば、age < 65なので、30%の割引が適用される。(age >= 65 の場合、この分岐に入らない)
194
+
195
+ weekdayがYでなければ、10%の割引か、割引なし、なので次の割引率の判定を行う。
196
+
197
+
198
+
199
+ 同様に、10%の割引を判定する場合、すでにweekdayの判定はしているので、
200
+
201
+ couponの判定のみ行えば10%割引か判定できます。※ここが、わからない?(F)
202
+
203
+
204
+
205
+ ちなみに、全部愚直に書いても問題があるわけではありません。