🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

2411閲覧

Javaのコンパイル時に大量のエラーが発生しました

退会済みユーザー

退会済みユーザー

総合スコア0

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2019/11/10 13:22

編集2019/11/10 15:42

前提・実現したいこと

こんばんは。プログラミング/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!】"); //敗北メッセージ } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2019/11/10 13:23

タイトルのjavascriptをJavaに訂正してください。紛らわしいです。
azuapricot

2019/11/10 13:29

この部分だけでは原因は特定が難しいのでコードの全体を提示してください。
gentaro

2019/11/10 13:44

JavaとJavaScriptは全くの別物なので、「紛らわしい」どころか明確に間違っていますね。
退会済みユーザー

退会済みユーザー

2019/11/10 14:04

タイトルのJavascriptをjavaに修正し、全ソースコードを掲載しました。 teratailのようなプログラミング質問サイトを利用するのは初めてなので、他にも至らぬ点などございましたらアドバイスして頂ければありがたいです。
azuapricot

2019/11/11 00:24

問題は解決してないように質問文に追記していますが、解決していますよね? 人からもらったコードを何も考えずにただコピペして動かしているから解決できないんですよ。 回答者が問題点も教えてくれてるじゃないですか、自分で少しは改めて眺めてみましたか? そんなところにif文あったって使えるわけないです
gentaro

2019/11/11 00:53

まぁそれよりも https://teratail.com/help/avoid-asking 「学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。」 こっちの方が問題だと思いますが。
guest

回答3

0

###お詫び
teratailの皆様、回答・修正依頼の投稿ありがとうございます。

この度は非推奨であるにも関わらず学校の課題に関する質問をすることにより皆様に多大な迷惑をかけることとなり、自責の念を感じております。

また、学校での日頃の学習でサンプルコードをコピー&ペーストするだけでjavaを書けるようになったと錯覚していた自分に嫌悪感を抱きました。

今回のようなモラルや知識の欠如を原因とした事故の再発を防止するため、
サービスの利用規約を厳守すること、
javaを含めたプログラミングに関する事柄を参考書を使用して一から独学での再学習を行い、基礎知識を徹底的に定着させることを中心に、
自己の改善に努めて参ります。

末筆ではございますが、この度の不手際につきまして、重ねてお詫び申し上げます。

投稿2019/11/11 07:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

動かしてないからぱっと見だけど

Java

1 } 2 } 3 4 if (count > 10) {//カウント関数が10回を越えた(=10回以内に潜水艦を撃沈できずに失敗した)場合の処理 5 System.out.println("相手の潜水艦の撃沈に失敗しました。【GAME OVER!】");//敗北メッセージ 6 } 7}

}多いだけなんじゃ?

訂正
}をif文の後ろに持っていくと数が合いそう。

伝わりにくいかもしれんけど、とりあえず{}の対応関係をチェックしてください。


追記

先程、Windows環境にファイルを移してVS codeで}の数を再確認しましたが、特に数が多すぎるといったことはありませんでした。

結構ゴチャゴチャした感じのコードなのでわかりづらいですが…

そもそもきちんとインデントを付けられていないのでわからないんだろうと思います。
整形してくれるIDEを利用するか、以下のようなサイトにソースコードを貼り付けて確認してみてください。

https://www.tutorialspoint.com/online_java_formatter.htm

質問文のコードを貼り付けて整形すると以下のようになります。

Java

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}

最後のif文がmainメソッドの外側に書かれているのすぐわかるはずです。

投稿2019/11/10 14:14

編集2019/11/10 14:56
gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/10 14:25

先程、Windows環境にファイルを移してVS codeで}の数を再確認しましたが、特に数が多すぎるといったことはありませんでした。 結構ゴチャゴチャした感じのコードなのでわかりづらいですが… 何か他の原因があるかもしれないのでもう少し自分でも調べてみます。
gentaro

2019/11/10 14:49

いや、少なくとも最後の部分は明らかに間違ってます。 if文はメソッド(クラスのメンバー)の中にないとダメですが、この{}の付け方を見る限りはmainメソッドの外側に書かれていますので。
退会済みユーザー

退会済みユーザー

2019/11/10 15:55

追記された質問文にもある通り、こちらの件に関しましては課題を出された先生方にアドバイスを頂くことにしました。 ここでは問題は解決できませんでしたが、稚拙な質問文やソースコードに付き合って頂けただけでも僕としてはこの上なく喜ばしい限りです。 改めまして回答ありがとうございました。
guest

0

提示のコードがコードの全てでしょうか。
なら、コンパイルできる形式のコードではありません。

JAVAの文法の基礎から学習し直しましょう。

投稿2019/11/10 13:40

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/10 14:18

先ほど、全ソースコードを掲載しました。 ご迷惑をお掛け致しました。
y_waiwai

2019/11/10 14:28

if文が関数/メソッドの中に入ってません。 関数の外に出てしまっているためにエラーが出ていますね
退会済みユーザー

退会済みユーザー

2019/11/10 14:37

返信ありがとうございます。 最後のif文を「public static void main(以下略)」のメゾットの中に入れてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問