質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

解決済

3回答

271閲覧

Javaのpackageのエラー解消方法を教えてください。

JavaScript

総合スコア5

0グッド

0クリップ

投稿2024/12/08 10:57

実現したいこと

同じクラス名のメゾットがあるので、packageを宣言したいのですが、なぜエラーになるのかわかりません。
イメージ説明
イメージ説明
イメージ説明

発生している問題・分からないこと

コンパイルエラーが発生します。

エラーメッセージ

error

1【VSCodeのコード】 2';'がありません(errors(1): 1:1-1:39) 3The declared package "Java完全入門.練習データ.chapter05.復習" does not match the expected package ""Java(536871240) 4package Java完全入門.練習データ 5 6 7【コンパイル時のターミナル】 8Equal.java:1: エラー: ';'がありません 9package Java完全入門.練習データ.chapter05.復習.3; 10 ^ 11エラー1個

該当のソースコード

Java

1package Java完全入門.練習データ.chapter05.復習.3; 2 3public class Equal { 4 public static void main(String[] args) { 5 6 // 変数a,bを初期化 7 int a=123, b=456; 8 9 // a,bを等価演算子で比較し、結果をtrue,falseで出力 10 System.out.println(a==b); 11 System.out.println(a!=b); 12 13 } 14}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

・packageはJavaファイルの先頭に記述します。
・最上位階層のフォルダ名から順に「.」(ピリオド)を使って連結します。
・パッケージ名の後には「;」(セミコロン)を記述します。
ということがわかり、その通りにしていると思うのですが、エラーになってしまいます。

補足

特になし

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

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

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

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

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

guest

回答3

0

ベストアンサー

VSCode でJavaプロジェクトを作成せずに「chapter05」というフォルダを直接開いた状態だと思うのですが
そうすると、いわゆるソースフォルダ無しに「復習」というフォルダがパッケージのルート扱いになっているはずです。

つまり 復習.3.Equal がクラスの完全修飾名となりパッケージ宣言は package 復習.3; が正しい……のですが
javaの有効な識別子として、数字を先頭に用いることは出来ません(ので、エラーとして 『".3" を消せ』とか出ています)。

解決策の例(いずれか)

  1. package 復習.好きなテキスト3; にしてフォルダもリネームする
  2. package 復習03; にして section03 とかと似たような配置にする

コマンドについて追記 2024/12/09 09:00

javacコマンドによるコンパイル時には、ファイルを対象にするので 復習\Q3\Equal.java のように 「\区切り」で「ファイルの拡張子も指定する」、今の方法で正しいです。

一方javaコマンドによる実行時には、ファイルではなくパッケージ名を含めた完全修飾クラス名を指定します。
こちらはソースコード中に登場するように、「ドット . 区切り」で「拡張子も存在しない」です。
つまり正しいコマンドは java 復習.Q3.Equal となります。

投稿2024/12/08 13:29

編集2024/12/09 00:02
pecmm

総合スコア732

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

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

JavaScript

2024/12/08 14:30

回答ありがとうございます。試してみましたが解決できませんでした。 package 復習.Q3; にして、コードのエラーは無くなってコンパイルはできたのですが、クラスメゾットを実行できません。 【ターミナルの記述】※\はバックスラッシュです。 PS D:\Java完全入門\練習データ\chapter05> javac 復習\Q3\Equal.java PS D:\Java完全入門\練習データ\chapter05> java 復習\Q3\Equal エラー: メイン・クラス復習\Q3\Equalを検出およびロードできませんでした 原因: java.lang.NoClassDefFoundError: 復習\Q3\Equal (wrong name: 復習/Q3/Equal) この場合どの辺りに原因がありそうでしょうか?
pecmm

2024/12/09 00:40

これは余談なのですが おそらくJava関連の拡張機能を入れてVSCodeを使用していると思われるので IDEの入力支援やクイック修正といった機能を積極的に使っていくと学習効率が上がるんじゃないかなと。 クイック修正のやり方 ---- 修正前コード(質問提示)でエディタ内のエラー箇所が赤線表示されていますが そこにマウスカーソルを合わせると、エラーの詳細がダイアログ表示されます。 このダイアログの下部にある『Quick Fix...(Ctrl+.)』をクリックすると、 修正候補が表示されます(多分、パッケージを修正するかファイル移動の2つ)。 どれを選択しても、自動で正しい修正がなされます。 ---- もしくは、画面左側の「エクスプローラー」ビューでjavaファイルをドラッグ&ドロップで移動させる際の修正提案を受け入れるとか そもそも「New Java File」でクラスを作成するなどすれば IDEが最初から正しいパッケージ・ファイル構成で扱ってくれるので、プログラマは細かいことを気にせずに済みます。 特に初学者であれば、IDEに正解を教えてもらいながら学習することができるわけです。 ある程度理解が進んできて、敢えてコマンドを自力で叩けるように……という段階でなければ 積極的にIDEの支援を活用するのが良いと個人的に考えます。
JavaScript

2024/12/09 11:34

回答ありがとうございます。 追記の方法で実行したところ問題が解決しました! クイック修正の方法についても教えてくださりありがとうございます、プログラミング初学者なのですごく助かります! IDEの活用方法についても学んでいこうと思います! ベストアンサーに選ばせていただきました。
guest

0

「なぜエラーが起きるのか」に対する明確な回答はできません
VSCodeはIDEではないのでコードを完全に正確には解析できません
文法が正しくても警告を出すことがあるので参考程度に留めましょう

本題ですが、Javaにおけるパッケージというのは、ルートディレクトリから見たフォルダの階層を指します

package Java完全入門.練習データ.chapter05.復習.3;

であれば、Java完全入門というフォルダの属するフォルダがルートディレクトリです
パッケージはこのルートから目的のフォルダまでのパスを表します

このルートディレクトリをコンパイラに通知するには、クラスパスを指定します
クラスパスのオプションは-cpです

javac ファイル名.java -cp ルートディレクトリ

ファイル名及びルートディレクトリまでのパスは相対または絶対パスを使用します
相対パスを用いる場合はjavacを実行しようとしているフォルダを出発点としたパスを指定しましょう

投稿2024/12/08 13:29

編集2024/12/08 13:30
nanashi123

総合スコア115

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

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

JavaScript

2024/12/09 11:35

回答ありがとうございます。 ベストアンサーは別の方を選ばせていただきましたが、こちらの回答も非常に参考になりました!
guest

0

java のパッケージはファイルシステムのフォルダ/ディレクトリ構造とリンクしています。
具体的には、 "Java完全入門.練習データ.chapter05.復習.3" パッケージに属する "Equal" クラスは、 "Java完全入門/練習データ/chapter05/復習/3" フォルダ/ディレクトリ内の "Equals.java" ファイルに記述されていなければなりません。
そして、ここからが間違え易いのですが、コンパイル時等は "そのパッケージのフォルダがあるフォルダ/ディレクトリで" 行わなければなりません。
D ドライブ直下に Java完全入門\練習データ\chapter05\復習\3 フォルダを作りその中に Equal.java を作ったのであれば、
D:\ をカレントディレクトリとした上で javac Java完全入門\練習データ\chapter05\復習\3\Equal.java とする必要があり、当然実行も java Java完全入門.練習データ.chapter05.復習.3.Equal とすることになります。

投稿2024/12/08 11:07

編集2024/12/08 11:11
jimbe

総合スコア13209

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

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

JavaScript

2024/12/08 12:52

回答ありがとうございます。試してみましたが解決できませんでした。 EqualクラスはEqual.javaの中に記述されています。 また、下記のようにコンパイルしたのですが、同様のエラーが発生してしまいました。 PS D:\> javac Java完全入門\練習データ\chapter05\復習\3\Equal.java (\はバックスラッシュです) この場合どの辺りに原因がありそうでしょうか?
jimbe

2024/12/08 14:02

失礼しました。 pecmmさん回答の >javaの有効な識別子として、数字を先頭に用いることは出来ません(ので、エラーとして 『".3" を消せ』とか出ています)。 という指摘が当たりそうです。(実際に試しての確認はしていません。)
JavaScript

2024/12/08 14:31

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問