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

回答編集履歴

3

編集3

2020/02/23 14:18

投稿

shinami
shinami

スコア334

answer CHANGED
@@ -4,8 +4,7 @@
4
4
  そういうルールとなっているのでそれに従うだけなのです。
5
5
 
6
6
  ```java
7
- if (条件式)
7
+ if (条件式) {
8
- {
9
8
  //条件が一致した場合のみこの中を実行
10
9
  }
11
10
  ```
@@ -62,4 +61,65 @@
62
61
 
63
62
  ```
64
63
 
65
- エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っている事が原因でエラーが出ている場合もあります。
64
+ エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っている事が原因でエラーが出ている場合もあります。
65
+
66
+ #### 補足
67
+ **補足しておきましたので参考に**
68
+
69
+ ```java
70
+ if(gender.matches("boy")) {
71
+ System.out.println("boy");              //boyのみ実行される
72
+ System.out.println("年齢を入力してください。"); //boyのみ実行される
73
+ int age = scanner.nextInt(); //boyのみ実行される
74
+ if ( age >= 20 ) { //boyのみ実行される
75
+ System.out.println("2000円"); //boyで年齢が20以上のみ実行される
76
+ } else if ( age <= 19 ) { //boyで年齢が20以上では無かった(事実上19以下)場合if文を実行
77
+ System.out.println("1800円"); //boyで年齢が20以上では無かったものをさらに19以下か
78
+ //判定し19以下であった場合実行される。
79
+ } else if (gender.matches("男")) { //int型で20以上ではなく19以下ではない数字はないので
80
+ //事実上これ以下は実行されることは無い
81
+ System.out.println("男");
82
+ System.out.println("年齢を入力してください。");
83
+ if ( age >= 20 ) {
84
+ System.out.println("2000円");
85
+
86
+ //***間は省略***
87
+
88
+ } //後からまとめてカッコで閉じると意味が変わってきます。
89
+ } //閉じるべき所で閉じる必要がある様です。
90
+ }
91
+ }
92
+ }
93
+ }
94
+ } //boy以外はここへ飛ぶ。
95
+ ```
96
+
97
+ では、こっちのプログラムの場合はどうでしょう。
98
+
99
+ ```java
100
+ if (gender.equals("boy") || gender.equals("男") || gender.equals("おとこ")) {
101
+ if (age >= 20) {
102
+ System.out.println("2000円");
103
+ } else {
104
+ System.out.println("1800円");
105
+ }
106
+ //ここからしたのプログラムが動作しない。****どこかで見た流れですね****
107
+ //「girl、女、おんな」をいれ、年齢をいれたあとに値段の表示がされない。
108
+ if (gender.equals("girl") || gender.equals("女") || gender.equals("おんな")) {
109
+ if (age >= 20) {
110
+ System.out.println("1600円");
111
+ } else {
112
+ System.out.println("1400円");
113
+ }
114
+ }
115
+ }
116
+ // カッコの位置が悪いのでこの様なプログラムになった様です。本来はどこの間に}が必要だったのか
117
+ // girlの場合はどの行へ飛んでしまうのか
118
+
119
+ if (条件式) {
120
+ //条件が一致した場合のみこの中を実行
121
+ }
122
+ ```
123
+
124
+ 何故それぞれの行の先頭の位置を落としているのかを考えてみてください。
125
+ 質問者さんも`こうなるだろう`と思い先頭の位置を調整されているのだと思いますのでご自身のプログラムと見比べてみてください。

2

編集2

2020/02/23 14:18

投稿

shinami
shinami

スコア334

answer CHANGED
@@ -15,8 +15,8 @@
15
15
  System.out.println("boy"); // genderが(入力値が)boyの場合boyと表示 →実行後は [A] へ
16
16
  } else if (gender.matches("男")) { // if文の終了カッコ} else if文の開始カッコ{
17
17
  System.out.println("男"); // genderがboyでは無かったが男であった場合男と表示 →実行後は [A] へ
18
- } // else if文の終了カッコ
18
+ } // [A] (}の後ろ) // }はelse if文の終了カッコ
19
- // [A]
19
+
20
20
  ```
21
21
 
22
22
  では、問題になるのが終盤あたりです。

1

編集1

2020/02/22 10:42

投稿

shinami
shinami

スコア334

answer CHANGED
@@ -1,12 +1,22 @@
1
- コード中段あたりのif、else if、elseは{と}で囲んでいるのでエラーは出ていませんね。
1
+ コード中段あたりのif、else if、elseは{と}で正しく囲んでいるのでエラーは出ていませんね。
2
2
  また、;も無いのでエラーは出ていません。
3
+ 値の代入や宣言、メソッドなどでは末尾に;を付けますがifやwhileやforなどの{と}で囲むものの末尾(}の後ろ)には;は付けません。(条件式)の後ろにも付けません。
4
+ そういうルールとなっているのでそれに従うだけなのです。
3
5
 
4
6
  ```java
7
+ if (条件式)
8
+ {
9
+ //条件が一致した場合のみこの中を実行
10
+ }
11
+ ```
12
+
13
+ ```java
5
- if(gender.matches("boy")) { // ifの開始カッコ{
14
+ if(gender.matches("boy")) { // ifの開始カッコ{
6
- System.out.println("boy"); // genderが(入力値が)boyの場合boyと表示
15
+ System.out.println("boy"); // genderが(入力値が)boyの場合boyと表示 →実行後は [A] へ
7
- } else if (gender.matches("男")) { // if文の終了カッコ} else if文の開始カッコ{
16
+ } else if (gender.matches("男")) { // if文の終了カッコ} else if文の開始カッコ{
8
- System.out.println("男"); // genderがboyでは無かったので男ですか?と調べた所、男であった場合男と表示
17
+ System.out.println("男"); // genderがboyでは無かった男であった場合男と表示 →実行後は [A] へ
9
18
  } // else if文の終了カッコ
19
+ // [A]
10
20
  ```
11
21
 
12
22
  では、問題になるのが終盤あたりです。
@@ -25,21 +35,22 @@
25
35
 
26
36
  ```java
27
37
  if (gender.matches("boy")) //genderはboyですか?
28
- ; //genderがboyなら何もしない、boyで無くても何もしない。
38
+ ; //genderがboyなら何もしない(;だけなので)、boyで無くても当然何もしない。 そしてif文は完結
29
- if (gender.matches("男")) //genderは男ですか?
39
+ if (gender.matches("男")) //全く新しいif文の判定。genderは男ですか?
30
- ; //genderが男なら何もしない、男で無くても何もしない。
40
+ ; //genderが男なら何もしない(;だけなので)、男で無くても当然何もしない。 そしてif文は完結
31
41
  int age = scanner.nextInt(); //年齢を入力
32
42
 
33
- } else if (age >= 20);{ // ? 突然 } から始まりましたね。のでエラー。
43
+ } else if (age >= 20);{ // ? 突然 } から始まりましたね。行以前if文も完結してるのでelseから始まるのはおかしい。よってエラー。
34
- // )と{の間に;がありますが様に使えるようになっていないので;を消す
44
+ // )と{の間に;がありますがif文ルール上使えるようになっていないので;を消す
35
45
  System.out.println("2000円"); // 2000円と表示
36
46
  } else if (age <= 19 );{ // ;が付いている以外は良いが1つ前のelse if文の影響を受けて連鎖してエラー。
37
- // )と{の間に;がありますが様に使えるようになっていないので;を消す
47
+ // )と{の間に;がありますがif文ルール上使えるようになっていないので;を消す
38
48
  System.out.println("1800円"); // 1800円と表示
39
49
  }
40
50
  ```
41
51
 
42
- また、すでに回答にありますがif文などは条件に一致したもののみ実行するものが1行で済む場合に{と}は省略できます。if文の次の行や末尾につけたプログラムが対象です。
52
+ また、すでに回答にありますがif文などは条件に一致したもののみ実行するものが1行で済む場合に{と}は省略できます。1行とは、if文の次の行や末尾につけたプログラムが対象です。
53
+ 逆にその1行を書かなければそれはそれでエラーが出ます。
43
54
 
44
55
  ```java
45
56
  if (gender.matches("boy"))
@@ -51,4 +62,4 @@
51
62
 
52
63
  ```
53
64
 
54
- エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っていてどうにもならなくなったの、そこでエラーが出ている場合もあります。
65
+ エラーが出てもその行のプログラムが間違っているとは限らず、その行より前のどこかで書き方が間違っている事が原因でエラーが出ている場合もあります。