質問するログイン新規登録

回答編集履歴

2

あれ?

2019/05/14 12:17

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -100,4 +100,16 @@
100
100
  同様に、10%の割引を判定する場合、すでにweekdayの判定はしているので、
101
101
  couponの判定のみ行えば10%割引か判定できます。※ここが、わからない?(F)
102
102
 
103
- ちなみに、全部愚直に書いても問題があるわけではありません。
103
+ ちなみに、全部愚直に書いても問題があるわけではありません。
104
+
105
+ ---
106
+ 単純に仕様が理解できていないだけ?
107
+
108
+ > ➀クーポン持参:10%0ff
109
+ ➁平日割引:30%off
110
+ ➂平日シニア割引(65歳以上):50%off
111
+ ※2つ以上の割引サービスが重なった場合は、割引率が高い方が優先される。
112
+
113
+ の場合、クーポン持参で、平日で、60歳の人の割引率がどれになるか、わからない?
114
+ 10%offと50%offで、どちらが割引率が高いか、わからない?
115
+ 10%と10%offを同じものだと思っている?

1

こゆこと?

2019/05/14 12:17

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -18,4 +18,86 @@
18
18
 
19
19
  なぜ、その条件なのか?
20
20
  は、日本語の仕様を理解していただくか、
21
- デシジョンテーブルの読み方を理解するしかないです。
21
+ デシジョンテーブルの読み方を理解するしかないです。
22
+
23
+ ---
24
+ ここから追記
25
+
26
+ こうゆうこと?
27
+ デシジョンテーブルを愚直に実装すると以下のようなif文になるはずで
28
+ ```java
29
+ if(coupon == 'Y' && weekday == 'Y' && age >= 65) {
30
+ // ルール列1
31
+ sale = "50%OFF";
32
+ }else if(coupon == 'Y' && weekday == 'Y' && age < 65) {
33
+ // ルール列2
34
+ sale = "30%OFF";
35
+ }else if(coupon == 'Y' && weekday != 'Y' && age >= 65) {
36
+ // ルール列3
37
+ sale = "10%OFF";
38
+ }else if(coupon == 'Y' && weekday != 'Y' && age < 65) {
39
+ // ルール列4
40
+ sale = "10%OFF";
41
+ }else if(coupon != 'Y' && weekday == 'Y' && age >= 65) {
42
+ // ルール列5
43
+ sale = "50%OFF";
44
+ }else if(coupon != 'Y' && weekday == 'Y' && age < 65) {
45
+ // ルール列6
46
+ sale = "30%OFF";
47
+ }else if(coupon != 'Y' && weekday != 'Y' && age >= 65) {
48
+ // ルール列7
49
+ sale = "割引なし";
50
+ }else if(coupon != 'Y' && weekday != 'Y' && age > 65) {
51
+ // ルール列8
52
+ sale = "割引なし";
53
+ }
54
+ ```
55
+ 上記がなぜ、単純なif文になるかわからないってことかな。
56
+ ```java
57
+ if(weekday =='Y' && age >=65){
58
+ sale="50%OFF";
59
+ } else if (weekday == 'Y'){
60
+ sale ='30%OFF";
61
+ } else if (coupon == 'Y'){
62
+ sale="10%OFF";
63
+ }
64
+ ```
65
+
66
+ > ※2つ以上の割引サービスが重なった場合は、割引率が高い方が優先される。
67
+
68
+ なので、割引率の高い順に適用されるかを判定します。※ここが、わからない?(A)
69
+
70
+ 50%の割引が適用されるルールは、列1と列5です。
71
+ if文で書くと
72
+ ```java
73
+ if((coupon == 'Y' && weekday == 'Y' && age >= 65) ||
74
+ (coupon != 'Y' && weekday == 'Y' && age >= 65)){
75
+ ```
76
+ coupon は、Yでもそれ以外でも、50%の割引率になることがわかるので ※ここが、わからない?(B)
77
+
78
+ ```java
79
+ if(weekday == 'Y' && age >= 65) {
80
+ ```
81
+ だけ判定すれば良い。※ここが、わからない?(C)
82
+ 50%の割引が適用されない場合、次に割引率が高いのは、30%なので、同様に ※ここが、わからない?(D)
83
+ ```java
84
+ }else if((coupon == 'Y' && weekday == 'Y' && age < 65) ||
85
+ (coupon != 'Y' && weekday == 'Y' && age < 65)) {
86
+ ```
87
+ となります。
88
+ 50%の割引のように考えると
89
+ ```java
90
+ if(weekday == 'Y' && age < 65) {
91
+ ```
92
+ と、なるのでは?と考えるかもしれませんが、`(weekday == 'Y' && age >= 65)`を事前にチェックしているので、
93
+ この分岐を通る場合 weekdayが'Y'でないか、age < 65 であるはずです。 ※ここが、わからない?(E)
94
+ ※age < 65を書いてもよいですが不要な記述を一般的にはイヤがります
95
+ それであれば、weekdayがYかを判定すれば、ageの判定は不要です。
96
+ なぜかというと、
97
+ weekdayがYであれば、age < 65なので、30%の割引が適用される。(age >= 65 の場合、この分岐に入らない)
98
+ weekdayがYでなければ、10%の割引か、割引なし、なので次の割引率の判定を行う。
99
+
100
+ 同様に、10%の割引を判定する場合、すでにweekdayの判定はしているので、
101
+ couponの判定のみ行えば10%割引か判定できます。※ここが、わからない?(F)
102
+
103
+ ちなみに、全部愚直に書いても問題があるわけではありません。