回答編集履歴
3
編集3
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
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
|
-
|
37
|
+
|
38
38
|
|
39
39
|
```
|
40
40
|
|
1
編集1
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(
|
13
|
+
if (条件式)
|
10
14
|
|
11
|
-
|
15
|
+
{
|
12
16
|
|
13
|
-
|
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
|
+
エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っている事が原因でエラーが出ている場合もあります。
|