前提・実現したいこと
こんばんは。プログラミング/Java初心者です。
Javaのソースコードをjavac
でコンパイルしようとしたところ、下記のようなエラーが発生してしまいました。
BattleShip.java:56: エラー: 型の開始が不正です if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: <identifier>がありません if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: ';'がありません if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: 型の開始が不正です if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: <identifier>がありません if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: ';'がありません if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:57: エラー: 型の開始が不正です System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ ^ BattleShip.java:57: エラー: ';'がありません System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ ^ BattleShip.java:57: エラー: 無効なメソッド宣言です。戻り値の型が必要です。 System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ ^ BattleShip.java:57: エラー: 型の開始が不正です System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ ^ BattleShip.java:59: エラー: class、interfaceまたはenumがありません } ^ エラー11個
該当のソースコードは以下ののようなものらしいのですが…
lang
1 if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 2 System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ 3 } 4}
;がありません
というエラーメッセージを見て該当箇所の「;」の有無などを確認して何度コンパイルをやり直しても同様のエラーが発生し、先に進むことができません。
また、その他のエラーの詳細をネット上で調べてみたのですが、結局エラーの意味や原因を理解することができなかったので、噛み砕いて説明していただけると嬉しいです。
御回答よろしくお願い致します。
###全ソースコード
lang
1public class BattleShip { 2 //潜水艦の座標を乱数で0-9の範囲で生成 3 int sx = (int)(Math.random()*10); 4 int sy = (int)(Math.random()*10); 5 6 public static void main(String[] args) throws IOException { 7 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); //標準入力の準備 8 int count = 1;//砲撃回数カウント用の変数を作成 9 10 while (count <= 10) {//攻撃回数が10回を越えていない場合は繰り返す 11 //数値の入力 12 System.out.println("砲撃のx座標を入力してください。(0-9)"); //ユーザに入力を促す 13 int hx = Integer.parseInt(buf.readLine()); //標準入力からx座標を入力 14 while (!(0 <= hx <= 9)) {//0-9以外の値が入力された場合、正しい数が入力されるまで警告を表示して繰り返す 15 System.out.println("!エラー:0から9までの整数を入力してください!"); //ユーザに入力を促す 16 System.out.println("砲撃のx座標を入力してください。(0-9)"); //ユーザに入力を促す 17 int hx = Integer.parseInt(buf.readLine()); //標準入力からx座標を入力 18 } 19 20 System.out.println("砲撃のy座標を入力してください。(0-9)"); //ユーザに入力を促す 21 int hy = Integer.parseInt(buf.readLine()); //標準入力からy座標を入力 22 while (!(0 <= hy <= 9)) {//0-9以外の値が入力された場合、正しい数が入力されるまで警告を表示して繰り返す 23 System.out.println("!エラー:0から9までの整数を入力してください!"); //ユーザに入力を促す 24 System.out.println("砲撃のy座標を入力してください。(0-9)"); //ユーザに入力を促す 25 int hy = Integer.parseInt(buf.readLine()); //標準入力からy座標を入力 26 } 27 //数値入力終了、ゲーム開始 28 System.out.println("砲撃回数" + count);//砲撃回数の表示 29 30 if (sx == hx && sy == hy) {//命中判定 31 //(※砲撃が命中した場合の処理) 32 System.out.println("砲撃(" + hx + "," + hy + ")は命中しました!");//命中座標の通知 33 System.out.println("相手の潜水艦を撃沈しました。 【YOU WIN!】");//勝利メッセージ 34 System.out.println();//表示を整えるために改行 35 count = 0;//ループ脱出のためにカウント変数を0に設定 36 } else {//(※砲撃が外れた場合の処理) 37 System.out.println("砲撃(" + hx + "," + hy + ")は外れました...");//命中座標の通知 38 //ここからマンハッタン距離の算出 39 int xm = sx - hx;//潜水艦x座標と着弾x座標の誤差の算出 40 int ym = sy - hy;//潜水艦y座標と着弾y座標の誤差の算出 41 if (xm < 0) {//潜水艦x座標と着弾x座標の誤差が負の値になった場合の修正処理 42 xm = -xm; 43 } 44 if (ym < 0) {//潜水艦y座標と着弾y座標の誤差が負の値になった場合の修正処理 45 ym = -ym; 46 } 47 int man = xm + ym;//x座標、y座標それぞれの誤差の合計の算出 48 //マンハッタン距離の算出終了 49 System.out.println("相手潜水艦との誤差は" + man);//砲撃 50 count++;//カウント演算子を1増加 51 System.out.println();//表示を整えるために改行 52 } 53 } 54 } 55 56 if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 57 System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ 58 } 59}
補足情報(FW/ツールのバージョンなど)
CentOS Linux release 7.5.1804 (Core)
###2019/11/11 0:38追記
先程、解答欄にてgentaro様がインデントを修正したソースコードを投稿してくださいましたので(gentaro様、ありがとうございます!)こちら側で実行してみたのですが、やはりエラーの嵐が収まる気配がありません…
このコードは「潜水艦ゲームを作成しなさい」という名目の学校の課題で書いたものなので、出題した先生にアドバイスを頂くことにしました。結果は早急にこちらに投稿致します。
それまでに何かお気づきの点がございましたらこちらに投稿して頂けるとありがたいです。
稚拙な質問文・ソースコードではございましたが、それらから問題の原因の特定を行ってくれた皆様に深く感謝申し上げます。
コンパイル実行時のエラー
BattleShip.java:56: エラー: 型の開始が不正です if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: <identifier>がありません if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: ';'がありません if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: 型の開始が不正です if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: <identifier>がありません if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:56: エラー: ';'がありません if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 ^ BattleShip.java:57: エラー: 型の開始が不正です System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】"); //敗北メッセージ ^ BattleShip.java:57: エラー: ';'がありません System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】"); //敗北メッセージ ^ BattleShip.java:57: エラー: 無効なメソッド宣言です。戻り値の型が必要です。 System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】"); //敗北メッセージ ^ BattleShip.java:57: エラー: 型の開始が不正です System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】"); //敗北メッセージ ^ BattleShip.java:59: エラー: class、interfaceまたはenumがありません } ^ エラー11個
ソースコード全体
public class BattleShip { //潜水艦の座標を乱数で0-9の範囲で生成 int sx = (int)(Math.random() * 10); int sy = (int)(Math.random() * 10); public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); //標準入力の準備 int count = 1; //砲撃回数カウント用の変数を作成 while (count <= 10) { //攻撃回数が10回を越えていない場合は繰り返す //数値の入力 System.out.println("砲撃のx座標を入力してください。(0-9)"); //ユーザに入力を促す int hx = Integer.parseInt(buf.readLine()); //標準入力からx座標を入力 while (!(0 <= hx <= 9)) { //0-9以外の値が入力された場合、正しい数が入力されるまで警告を表示して繰り返す System.out.println("!エラー:0から9までの整数を入力してください!"); //ユーザに入力を促す System.out.println("砲撃のx座標を入力してください。(0-9)"); //ユーザに入力を促す int hx = Integer.parseInt(buf.readLine()); //標準入力からx座標を入力 } System.out.println("砲撃のy座標を入力してください。(0-9)"); //ユーザに入力を促す int hy = Integer.parseInt(buf.readLine()); //標準入力からy座標を入力 while (!(0 <= hy <= 9)) { //0-9以外の値が入力された場合、正しい数が入力されるまで警告を表示して繰り返す System.out.println("!エラー:0から9までの整数を入力してください!"); //ユーザに入力を促す System.out.println("砲撃のy座標を入力してください。(0-9)"); //ユーザに入力を促す int hy = Integer.parseInt(buf.readLine()); //標準入力からy座標を入力 } //数値入力終了、ゲーム開始 System.out.println("砲撃回数" + count); //砲撃回数の表示 if (sx == hx && sy == hy) { //命中判定 //(※砲撃が命中した場合の処理) System.out.println("砲撃(" + hx + "," + hy + ")は命中しました!"); //命中座標の通知 System.out.println("相手の潜水艦を撃沈しました。 【YOU WIN!】"); //勝利メッセージ System.out.println(); //表示を整えるために改行 count = 0; //ループ脱出のためにカウント変数を0に設定 } else { //(※砲撃が外れた場合の処理) System.out.println("砲撃(" + hx + "," + hy + ")は外れました..."); //命中座標の通知 //ここからマンハッタン距離の算出 int xm = sx - hx; //潜水艦x座標と着弾x座標の誤差の算出 int ym = sy - hy; //潜水艦y座標と着弾y座標の誤差の算出 if (xm < 0) { //潜水艦x座標と着弾x座標の誤差が負の値になった場合の修正処理 xm = -xm; } if (ym < 0) { //潜水艦y座標と着弾y座標の誤差が負の値になった場合の修正処理 ym = -ym; } int man = xm + ym; //x座標、y座標それぞれの誤差の合計の算出 //マンハッタン距離の算出終了 System.out.println("相手潜水艦との誤差は" + man); //砲撃 count++; //カウント演算子を1増加 System.out.println(); //表示を整えるために改行 } } } if (count > 10) { //カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】"); //敗北メッセージ } }
回答3件
あなたの回答
tips
プレビュー