回答編集履歴

3

編集3

2020/02/23 14:18

投稿

shinami
shinami

スコア334

test CHANGED
@@ -10,9 +10,7 @@
10
10
 
11
11
  ```java
12
12
 
13
- if (条件式)
13
+ if (条件式) {
14
-
15
- {
16
14
 
17
15
  //条件が一致した場合のみこの中を実行
18
16
 
@@ -127,3 +125,125 @@
127
125
 
128
126
 
129
127
  エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っている事が原因でエラーが出ている場合もあります。
128
+
129
+
130
+
131
+ #### 補足
132
+
133
+ **補足しておきましたので参考に**
134
+
135
+
136
+
137
+ ```java
138
+
139
+ if(gender.matches("boy")) {
140
+
141
+ System.out.println("boy");              //boyのみ実行される
142
+
143
+ System.out.println("年齢を入力してください。"); //boyのみ実行される
144
+
145
+ int age = scanner.nextInt(); //boyのみ実行される
146
+
147
+ if ( age >= 20 ) { //boyのみ実行される
148
+
149
+ System.out.println("2000円"); //boyで年齢が20以上のみ実行される
150
+
151
+ } else if ( age <= 19 ) { //boyで年齢が20以上では無かった(事実上19以下)場合if文を実行
152
+
153
+ System.out.println("1800円"); //boyで年齢が20以上では無かったものをさらに19以下か
154
+
155
+ //判定し19以下であった場合実行される。
156
+
157
+ } else if (gender.matches("男")) { //int型で20以上ではなく19以下ではない数字はないので
158
+
159
+ //事実上これ以下は実行されることは無い
160
+
161
+ System.out.println("男");
162
+
163
+ System.out.println("年齢を入力してください。");
164
+
165
+ if ( age >= 20 ) {
166
+
167
+ System.out.println("2000円");
168
+
169
+
170
+
171
+ //***間は省略***
172
+
173
+
174
+
175
+ } //後からまとめてカッコで閉じると意味が変わってきます。
176
+
177
+ } //閉じるべき所で閉じる必要がある様です。
178
+
179
+ }
180
+
181
+ }
182
+
183
+ }
184
+
185
+ }
186
+
187
+ } //boy以外はここへ飛ぶ。
188
+
189
+ ```
190
+
191
+
192
+
193
+ では、こっちのプログラムの場合はどうでしょう。
194
+
195
+
196
+
197
+ ```java
198
+
199
+ if (gender.equals("boy") || gender.equals("男") || gender.equals("おとこ")) {
200
+
201
+ if (age >= 20) {
202
+
203
+ System.out.println("2000円");
204
+
205
+ } else {
206
+
207
+ System.out.println("1800円");
208
+
209
+ }
210
+
211
+ //ここからしたのプログラムが動作しない。****どこかで見た流れですね****
212
+
213
+ //「girl、女、おんな」をいれ、年齢をいれたあとに値段の表示がされない。
214
+
215
+ if (gender.equals("girl") || gender.equals("女") || gender.equals("おんな")) {
216
+
217
+ if (age >= 20) {
218
+
219
+ System.out.println("1600円");
220
+
221
+ } else {
222
+
223
+ System.out.println("1400円");
224
+
225
+ }
226
+
227
+ }
228
+
229
+ }
230
+
231
+ // カッコの位置が悪いのでこの様なプログラムになった様です。本来はどこの間に}が必要だったのか
232
+
233
+ // girlの場合はどの行へ飛んでしまうのか
234
+
235
+
236
+
237
+ if (条件式) {
238
+
239
+ //条件が一致した場合のみこの中を実行
240
+
241
+ }
242
+
243
+ ```
244
+
245
+
246
+
247
+ 何故それぞれの行の先頭の位置を落としているのかを考えてみてください。
248
+
249
+ 質問者さんも`こうなるだろう`と思い先頭の位置を調整されているのだと思いますのでご自身のプログラムと見比べてみてください。

2

編集2

2020/02/23 14:18

投稿

shinami
shinami

スコア334

test CHANGED
@@ -32,9 +32,9 @@
32
32
 
33
33
  System.out.println("男"); // genderがboyでは無かったが男であった場合男と表示 →実行後は [A] へ
34
34
 
35
- } // else if文の終了カッコ
35
+ } // [A] (}の後ろ) // }はelse if文の終了カッコ
36
36
 
37
- // [A]
37
+
38
38
 
39
39
  ```
40
40
 

1

編集1

2020/02/22 10:42

投稿

shinami
shinami

スコア334

test CHANGED
@@ -1,20 +1,40 @@
1
- コード中段あたりのif、else if、elseは{と}で囲んでいるのでエラーは出ていませんね。
1
+ コード中段あたりのif、else if、elseは{と}で正しく囲んでいるのでエラーは出ていませんね。
2
2
 
3
3
  また、;も無いのでエラーは出ていません。
4
+
5
+ 値の代入や宣言、メソッドなどでは末尾に;を付けますがifやwhileやforなどの{と}で囲むものの末尾(}の後ろ)には;は付けません。(条件式)の後ろにも付けません。
6
+
7
+ そういうルールとなっているのでそれに従うだけなのです。
4
8
 
5
9
 
6
10
 
7
11
  ```java
8
12
 
9
- if(gender.matches("boy")) { // if分の開始カッコ{
13
+ if (条件式)
10
14
 
11
- System.out.println("boy"); // genderが(入力値が)boyの場合boyと表示
15
+ {
12
16
 
13
- } else if (gender.matches("男")) { // if文終了カッコ} else if文開始カッコ{
17
+ //条件が一致した場合みこ中を実行
14
18
 
19
+ }
20
+
21
+ ```
22
+
23
+
24
+
25
+ ```java
26
+
27
+ if(gender.matches("boy")) { // if文の開始カッコ{
28
+
29
+ System.out.println("boy"); // genderが(入力値が)boyの場合boyと表示 →実行後は [A] へ
30
+
31
+ } else if (gender.matches("男")) { // if文の終了カッコ} else if文の開始カッコ{
32
+
15
- System.out.println("男"); // genderがboyでは無かったので男ですか?と調べた所、男であった場合男と表示
33
+ System.out.println("男"); // genderがboyでは無かった男であった場合男と表示 →実行後は [A] へ
16
34
 
17
35
  } // else if文の終了カッコ
36
+
37
+ // [A]
18
38
 
19
39
  ```
20
40
 
@@ -52,25 +72,25 @@
52
72
 
53
73
  if (gender.matches("boy")) //genderはboyですか?
54
74
 
55
- ; //genderがboyなら何もしない、boyで無くても何もしない。
75
+ ; //genderがboyなら何もしない(;だけなので)、boyで無くても当然何もしない。 そしてif文は完結
56
76
 
57
- if (gender.matches("男")) //genderは男ですか?
77
+ if (gender.matches("男")) //全く新しいif文の判定。genderは男ですか?
58
78
 
59
- ; //genderが男なら何もしない、男で無くても何もしない。
79
+ ; //genderが男なら何もしない(;だけなので)、男で無くても当然何もしない。 そしてif文は完結
60
80
 
61
81
  int age = scanner.nextInt(); //年齢を入力
62
82
 
63
83
 
64
84
 
65
- } else if (age >= 20);{ // ? 突然 } から始まりましたね。のでエラー。
85
+ } else if (age >= 20);{ // ? 突然 } から始まりましたね。行以前if文も完結してるのでelseから始まるのはおかしい。よってエラー。
66
86
 
67
- // )と{の間に;がありますが様に使えるようになっていないので;を消す
87
+ // )と{の間に;がありますがif文ルール上使えるようになっていないので;を消す
68
88
 
69
89
  System.out.println("2000円"); // 2000円と表示
70
90
 
71
91
  } else if (age <= 19 );{ // ;が付いている以外は良いが1つ前のelse if文の影響を受けて連鎖してエラー。
72
92
 
73
- // )と{の間に;がありますが様に使えるようになっていないので;を消す
93
+ // )と{の間に;がありますがif文ルール上使えるようになっていないので;を消す
74
94
 
75
95
  System.out.println("1800円"); // 1800円と表示
76
96
 
@@ -80,7 +100,9 @@
80
100
 
81
101
 
82
102
 
83
- また、すでに回答にありますがif文などは条件に一致したもののみ実行するものが1行で済む場合に{と}は省略できます。if文の次の行や末尾につけたプログラムが対象です。
103
+ また、すでに回答にありますがif文などは条件に一致したもののみ実行するものが1行で済む場合に{と}は省略できます。1行とは、if文の次の行や末尾につけたプログラムが対象です。
104
+
105
+ 逆にその1行を書かなければそれはそれでエラーが出ます。
84
106
 
85
107
 
86
108
 
@@ -104,4 +126,4 @@
104
126
 
105
127
 
106
128
 
107
- エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っていてどうにもならなくなったの、そこでエラーが出ている場合もあります。
129
+ エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っている事が原因でエラーが出ている場合もあります。