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

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

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

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

コンパイル

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

Q&A

解決済

2回答

11151閲覧

javaのパッケージのコンパイルについて

coreysnop

総合スコア7

Java

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

コンパイル

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

0グッド

1クリップ

投稿2017/10/17 12:34

編集2017/10/17 15:10

初めての利用です。
javaについてなんですが、パッケージがコンパイルできなくて困っているんですが、解決法を教えて下さい。

⇩これはコンパイルできたんですけど、
package Calcapp.logics;

public class CalcLogic{

public static int tasu(int a, int b){ return (a + b);

}

public static int hiku(int a, int b){ return (a - b);

}}

⇩こっちのほうがコンパイルできなくて、
Calc.java:11: エラー: パッケージCalcapp.logicsは存在しません
int total = Calcapp.logics.CalcLogic.tasu(a, b);
^
Calc.java:13: エラー: パッケージCalcapp.logicsは存在しません
int delta = Calcapp.logics.CalcLogic.hiku(a, b);
^
エラー2個
こういう表示がされたんですけどどうすればコンパイルできますか?

package Calcapp.main;

public class Calc{

public static void main(String[] args){ int a = 10; int b = 2; int total = Calcapp.logics.CalcLogic.tasu(a, b); int delta = Calcapp.logics.CalcLogic.hiku(a, b); System.out.println("足すと" + total + " 、引くと" + delta);

}}

補足
何度もメッセージありがとうございます,これでも正確に説明できてなかったらすいません。

ディレクトリー構成はjava/calcapp/main,logics

コンパイルは1回目は 
javac java/calcapp/logics/CalcLogic.javaと指定してコンパイル
2回目は
javac java/calcapp/main/Calc.javaでコンパイルしたらエラーが出たんで、
javac java/Calc.java
でコンパイル成功してできたCalc.classをmainディレクトリにコピーして、
java calcapp.main.Calcで実行したらエラーが表示されて実行できません。

osはmacです。
よろしくお願いします。

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

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

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

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

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

coreysnop

2017/10/18 03:43

すいません、マルチポスト知りませんでした。指摘ありがとうございます、今後気をつけます
guest

回答2

0

作業用のディレクトリーとして作成したjavaにいるものとして、

mkdir Calcapp
cd Calcapp
mkdir logics
mkdir main

のように、パッケージ名として計画している通りの階層のディレクトリーを作成します。大文字小文字は区別されますので、そこまでパッケージ名と完全に一致させましょう。

ディレクトリー構成はjava/calcapp/main,logics

では、calcappの頭が小文字のために、コードに記述するパッケージ名と完全一致しません。これが後のエラーの原因にもなっています。

そして、logicの下にCalcLogic.javaを、mainの下にCalc.javaを作成します。

これで

java └ Calcapp ├ logics │ └ CalcLogic.java └ main └ Calc.java

というファイル配置になるはずです。ここで、javaディレクトリーで

javac Calcapp/main/Calc.java

のようにコマンドを実行すれば、Calc.javaのコンパイルのときにCalcLogic.javaも参照されますので、2つともコンパイルされるはずです。

ここから実行するには、同じ場所から

java Calcapp.main.Calc

のように、完全修飾クラス名で指定すれば実行できるでしょう。

投稿2017/10/17 21:43

編集2017/10/17 21:45
keicha_hrs

総合スコア6768

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

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

KSwordOfHaste

2017/10/18 03:13

自分の回答の中で一部「keicha_hrsさん」の敬称を付け忘れていたのに気づき訂正しました。 こちらのコメント欄にて自分の粗忽をお詫びさせていただきます。失礼しました。
coreysnop

2017/10/18 03:46

Keicha_hrsさんありがとうございます、おかげさまで解決しました。今後も機会があればよろしくお願いします。
guest

0

ベストアンサー

提示しておられるソース自体はやりかたさえ正しければコンパイルエラーは出ないはずですが、逆に「どうやったらこういうエラーが出るのか」についてはいくつか可能性が考えられます。多分「ディレクトリー構成/プロジェクト構成が不適切」あたりと思いますが、あなたがどうやったのかもう少し詳細な情報が必要です。

  • どのようなディレクトリー構成・プロジェクト構成か
  • コンパイルは何を使ってどういう操作手順でやったか

javacならどのディレクトリーで、どんなパラメーターを指定したかといったことです

  • 一応OSも書いておいた方がよいでしょう(Mac/Linux/Windowsのどれか程度)

こうしたことを明確にしてみてください。そうすれば原因と対処もはっきりすると思います。


追記:

keicha_hrsさん回答のようにすればコンパイルと実行ができると思いますので問題は解決できると思います。若干蛇足的な補足をしてみます。

(1) ソースファイルはパッケージ名と正確に一致したディレクトリーに配置する

大文字小文字を一致させなければならないのはkeicha_hrsさんコメントの通りです。ただ、2回目のコンパイルのときに「javac java/Calc.javaでコンパイルが成功した」と書かれているのですが、もしそのとおりならCalc.javaはjavaディレクトリーの直下に置いてあったはずです。しかしそういう場所に置くのはお勧めできません。Calc.javaが他のパッケージのクラスを全く参照していなければコンパイル自体はできますが、その代わり今回の問題のようにCalcクラスを別のソースファイルから参照するようなことができなくなってしまいます。コンパイルした結果できたclassファイルを別の場所へ無理やり移動するという手順も通常はやるべきではないです。最初から

java/Calcapp/main/Calc.java
java/Calcapp/logics/CalcLogic.java

のように置いておき、javaディレクトリーで

javac Calcapp/main/Calc.java (コンパイル)
java Calcapp.main.Calc (実行)

とするのが一番単純な方法です。(keicha_hrsさんのコメントにあるのと同じ方法です)

(2) Javaのソースファイルとclassファイルを別々のディレクトリーへ作成する

javacではなくIDEを使ってjavaプログラミングをするとわかりますが、classファイルはソースファイルとは別のディレクトリーに作成されるのが普通です。例えば以下のように。

java/Calcapp/main/Calc.java
java/Calcapp/logics/CalcLogic.java

bin/Calcapp/main/Calc.class
bin/Calcapp/logics/CalcLogic.class

そうなっていると「ソースだけを誰かに渡したい」、「クラスファイルだけを消したい」などという場合に都合がよいのです。javacを使う場合でもこのようにできます。例えばjavaディレクトリーでコンパイル&実行をするなら

javac -d ../bin Calcapp/main/Calc.java (コンパイル)
java -cp ../bin Calcapp.main.Calc (実行)

さらにjavaディレクトリーの一つ上のディレクトリーでコンパイル&実行するなら

javac -d bin -sourcepath java java/Calcapp/main/Calc.java (コンパイル)
java -cp bin Calcapp.main.Calc (実行)

(3) パッケージ名は全部小文字にしましょう

本件の問題とは関係ありませんが、これは習慣です。大文字のパッケージ名も目にすることはなくはないですが、少々異質に見えます。小文字のみで統一するのがよいです。当然ながら(1)に書いたようにソースファイルを置くディレクトリー名もパッケージ名に合わせて全部小文字にします。

最後に、質問文に状況を追記されてますが、少々曖昧です。「ディレクトリー構成にはソースファイルをどこに置いたかも明記する」「javacやjavaコマンドをどのディレクトリーで実行したかを明記する」ことも忘れないでください。

投稿2017/10/17 13:54

編集2017/10/18 03:06
KSwordOfHaste

総合スコア18394

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

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

coreysnop

2017/10/17 14:12

回答してくださりありがとうございます。 コンパイルはなんとかできたのですが、今度は実行ができなくて困っています。 java/calcapp/main,logicsのmainとlogicsのところにパッケージを保存していて、 java calcapp.main.Calcで実行すると、 エラー: メイン・クラスcalcapp.main.Calcが見つからなかったかロードできませんでした となリ実行できないのですが、どうすればよいのでしょうか?
KSwordOfHaste

2017/10/17 14:35

とりあえず、自分の回答に示した3つの情報を「質問文の方を編集して」そちらへ書いてください。 曖昧な書き方ではなく明確にかいてください。「logicsのところにパッケージを保存していて」と表現されてますが、それは残念ながら正確な表現ではないので明確とはいえません。おそらくは「java/calcapp/mainディレクトリーの下にCalc.javaとCalc.classの2つのファイルがある」ということなのでしょうから、そのような明確な書き方にしてください。実はjavacのパラーメータを書いていただいた方が正確に把握できます。 「javaディレクトリーで、 javac calcapp/main/Calc.java と指定してコンパイルした」などと書いた方が明解なのです。
coreysnop

2017/10/18 03:47 編集

KSwordofHasteさん、何度も解答してくださりありがとうございます、無事コンパイルも実行もできました。 今後もまたお世話になるかもしれないのでよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問