回答編集履歴

4

追記

2019/11/10 14:56

投稿

gentaro
gentaro

スコア8949

test CHANGED
@@ -33,3 +33,159 @@
33
33
 
34
34
 
35
35
  伝わりにくいかもしれんけど、とりあえず`{`と`}`の対応関係をチェックしてください。
36
+
37
+
38
+
39
+ ---
40
+
41
+ 追記
42
+
43
+
44
+
45
+ > 先程、Windows環境にファイルを移してVS codeで}の数を再確認しましたが、特に数が多すぎるといったことはありませんでした。
46
+
47
+ 結構ゴチャゴチャした感じのコードなのでわかりづらいですが…
48
+
49
+
50
+
51
+
52
+
53
+ そもそもきちんとインデントを付けられていないのでわからないんだろうと思います。
54
+
55
+ 整形してくれるIDEを利用するか、以下のようなサイトにソースコードを貼り付けて確認してみてください。
56
+
57
+
58
+
59
+ [https://www.tutorialspoint.com/online_java_formatter.htm](https://www.tutorialspoint.com/online_java_formatter.htm)
60
+
61
+
62
+
63
+ 質問文のコードを貼り付けて整形すると以下のようになります。
64
+
65
+
66
+
67
+ ```Java
68
+
69
+ public class BattleShip {
70
+
71
+ //潜水艦の座標を乱数で0-9の範囲で生成
72
+
73
+ int sx = (int)(Math.random() * 10);
74
+
75
+ int sy = (int)(Math.random() * 10);
76
+
77
+
78
+
79
+ public static void main(String[] args) throws IOException {
80
+
81
+ BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); //標準入力の準備
82
+
83
+ int count = 1; //砲撃回数カウント用の変数を作成
84
+
85
+
86
+
87
+ while (count <= 10) { //攻撃回数が10回を越えていない場合は繰り返す
88
+
89
+ //数値の入力
90
+
91
+ System.out.println("砲撃のx座標を入力してください。(0-9)"); //ユーザに入力を促す
92
+
93
+ int hx = Integer.parseInt(buf.readLine()); //標準入力からx座標を入力
94
+
95
+ while (!(0 <= hx <= 9)) { //0-9以外の値が入力された場合、正しい数が入力されるまで警告を表示して繰り返す
96
+
97
+ System.out.println("!エラー:0から9までの整数を入力してください!"); //ユーザに入力を促す
98
+
99
+ System.out.println("砲撃のx座標を入力してください。(0-9)"); //ユーザに入力を促す
100
+
101
+ int hx = Integer.parseInt(buf.readLine()); //標準入力からx座標を入力
102
+
103
+ }
104
+
105
+
106
+
107
+ System.out.println("砲撃のy座標を入力してください。(0-9)"); //ユーザに入力を促す
108
+
109
+ int hy = Integer.parseInt(buf.readLine()); //標準入力からy座標を入力
110
+
111
+ while (!(0 <= hy <= 9)) { //0-9以外の値が入力された場合、正しい数が入力されるまで警告を表示して繰り返す
112
+
113
+ System.out.println("!エラー:0から9までの整数を入力してください!"); //ユーザに入力を促す
114
+
115
+ System.out.println("砲撃のy座標を入力してください。(0-9)"); //ユーザに入力を促す
116
+
117
+ int hy = Integer.parseInt(buf.readLine()); //標準入力からy座標を入力
118
+
119
+ }
120
+
121
+ //数値入力終了、ゲーム開始
122
+
123
+ System.out.println("砲撃回数" + count); //砲撃回数の表示
124
+
125
+
126
+
127
+ if (sx == hx && sy == hy) { //命中判定
128
+
129
+ //(※砲撃が命中した場合の処理)
130
+
131
+ System.out.println("砲撃(" + hx + "," + hy + ")は命中しました!"); //命中座標の通知
132
+
133
+ System.out.println("相手の潜水艦を撃沈しました。 【YOU WIN!】"); //勝利メッセージ
134
+
135
+ System.out.println(); //表示を整えるために改行
136
+
137
+ count = 0; //ループ脱出のためにカウント変数を0に設定
138
+
139
+ } else { //(※砲撃が外れた場合の処理)
140
+
141
+ System.out.println("砲撃(" + hx + "," + hy + ")は外れました..."); //命中座標の通知
142
+
143
+ //ここからマンハッタン距離の算出
144
+
145
+ int xm = sx - hx; //潜水艦x座標と着弾x座標の誤差の算出
146
+
147
+ int ym = sy - hy; //潜水艦y座標と着弾y座標の誤差の算出
148
+
149
+ if (xm < 0) { //潜水艦x座標と着弾x座標の誤差が負の値になった場合の修正処理
150
+
151
+ xm = -xm;
152
+
153
+ }
154
+
155
+ if (ym < 0) { //潜水艦y座標と着弾y座標の誤差が負の値になった場合の修正処理
156
+
157
+ ym = -ym;
158
+
159
+ }
160
+
161
+ int man = xm + ym; //x座標、y座標それぞれの誤差の合計の算出
162
+
163
+ //マンハッタン距離の算出終了
164
+
165
+ System.out.println("相手潜水艦との誤差は" + man); //砲撃
166
+
167
+ count++; //カウント演算子を1増加
168
+
169
+ System.out.println(); //表示を整えるために改行
170
+
171
+ }
172
+
173
+ }
174
+
175
+ }
176
+
177
+
178
+
179
+ if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理
180
+
181
+ System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】"); //敗北メッセージ
182
+
183
+ }
184
+
185
+ }
186
+
187
+ ```
188
+
189
+
190
+
191
+ 最後のif文がmainメソッドの外側に書かれているのすぐわかるはずです。

3

typo修正

2019/11/10 14:56

投稿

gentaro
gentaro

スコア8949

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  訂正
30
30
 
31
- `}`をifの後ろに持っていくと数が合いそう。
31
+ `}`をifの後ろに持っていくと数が合いそう。
32
32
 
33
33
 
34
34
 

2

追記

2019/11/10 14:20

投稿

gentaro
gentaro

スコア8949

test CHANGED
@@ -29,3 +29,7 @@
29
29
  訂正
30
30
 
31
31
  `}`をif分の後ろに持っていくと数が合いそう。
32
+
33
+
34
+
35
+ 伝わりにくいかもしれんけど、とりあえず`{`と`}`の対応関係をチェックしてください。

1

訂正

2019/11/10 14:18

投稿

gentaro
gentaro

スコア8949

test CHANGED
@@ -22,4 +22,10 @@
22
22
 
23
23
 
24
24
 
25
- `}`多いだけなんじゃ?
25
+ ~~`}`多いだけなんじゃ?~~
26
+
27
+
28
+
29
+ 訂正
30
+
31
+ `}`をif分の後ろに持っていくと数が合いそう。