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

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

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

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

Q&A

解決済

2回答

2281閲覧

Javaパッケージが存在しませんのエラー解消方法

GANaki

総合スコア1

Java

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

0グッド

0クリップ

投稿2023/01/08 02:37

編集2023/01/08 03:53

前提

ここに質問の内容を詳しく書いてください。

https://qiita.com/ponume/items/50286ebeec10de55ee3c

上記で掲載されているコードを動かしたく、コマンドプロントでコンパイルしたところ、エラーが発生しました。

実現したいこと

エラーを解消して、コードを動かしたいです。

発生している問題・エラーメッセージ

beanフォルダに格納したJavaファイルはコンパイルが通りましたが、その他のファイルはパッケージdragon.beanが存在しませんというエラーが表示されてコンパイルができません。
エラーメッセージ

パッケージdragon.beanが存在しません
シンボルをみつけられません

該当のソースコード

https://qiita.com/ponume/items/50286ebeec10de55ee3c
上記に記載

### 試したこと 記載されたコードをコピペしてコマンドプロントでコンパイル ディレクトリ構成は以下のようにしているつもりですが、図の読み取りが誤っているかもしれません ├── DragonMain.java ├── bean │ ├── ButtleDragon.java │ ├── Action.java │ └── SimpleDragon.java └── util ├── buttle │ ├── ButtleContents.java │ ├── ButtleMain.java │ └── RandomEnemyChoice.java └── choice └── ChoiceDragon.java ### 補足情報(FW/ツールのバージョンなど) ![![![![![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-08/3597467c-af74-4b97-8067-691c819e54fe.jpeg)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-08/eef1ffe1-b15a-4713-a8df-27e6a4285d9a.jpeg)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-08/8d48c322-6a53-47cc-9545-eca7ac37e8e2.jpeg)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-08/ea2a5367-c1cf-4bf8-be3f-4569811ef021.jpeg)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-08/f4ff739c-48ad-409a-a9de-24cd297bb19b.jpeg) ここにより詳細な情報を記載してください。

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

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

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

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

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

jimbe

2023/01/08 03:14 編集

どのソースコードのどの行でエラーになっているのかを書いてください。 また、参照先のコードが動作するものであれば、ご自身の入力で見違えた可能性があります。その場合、入力したコードをご提示頂かなければ何処を間違えているか比較が出来ません。 ディレクトリ構成もこちらへの書き込み時に間違える可能性までありますので、スクリーンショット等で確実な情報としてご提示ください。 なお、参照先の「フォルダ構成」は、トップのパッケージが書かれておらず、また罫線の位置がずれています。 各ソースコードのパッケージ文からフォルダを構成したほうが良いと思います。
GANaki

2023/01/08 03:21

ありがとうございます。 スクリーンショットが撮れない環境のため、取り急ぎフォルダ構成の画像を添付させていただきます。
jimbe

2023/01/08 03:55

パッと見はフォルダ構成は大丈夫そうですね。 後はコンパイル方法ですが、 各フォルダのそれぞれのコードをコンパイルするのではなく、トップの位置 (C:\java) でDragonMain.java を指定すればすべてコンパイルされるのではないでしょうか。 cd \JAVA<enter> javac dragon\DragonMain.java<enter>
GANaki

2023/01/08 04:10

ありがとうございます。 コンパイルは通ったのですが、実行しようとするとパッケージdragon.beanは存在しませんというエラーとなってしまいます。 実行する際の指定の位置が誤ってますでしょうか?
GANaki

2023/01/08 04:19

五月雨にすみません。 cd \JAVA \dragonでjava DragonMain で実行したところメインクラスDragonMainを検出およびロードできませんでしたとなりました。
GANaki

2023/01/08 04:24

エラーコードはNoClassDefFoundErrorです。
jimbe

2023/01/08 07:33 編集

実行もコンパイルと同じフォルダからで、パッケージ指定が必要です。 cd \JAVA<enter> java dragon.DragonMain<enter> このようにパッケージ指定すると若干面倒になりますので、慣れないうちはパッケージを使わないか、Eclipse 等の IDE を用いたほうが良いです。 (IDE は IDE でまた面倒がありますが ><;)
GANaki

2023/01/08 07:43

ありがとうございます!先程試してみたところ、動きました。同じプログラムでパッケージを使わない記述もできないか挑戦してみます。
guest

回答2

0

ベストアンサー

qiita の記事のコードは「初心者がゲームを作った」ということで結構ごちゃごちゃです。
初心者のコードを初心者が参考にするのはあまり宜しくない気がしますが、だからと言って初心者じゃないコードを参考にするのも大変とは思います。が、まぁ参考の参考というか、違うコードを見るのも何かになるかもということでちょっと(?)直して(??)みました。(以下の 5 ファイルだけで、パッケージは使っていません。)
どこかのフォルダに5つを作成し、 javac Main.javajava Main で動作すると思います。(未確認)

Main.java

java

1import java.io.*; 2import java.util.*; 3 4public class Main { 5 public static void main(String[] args)throws Exception { 6 7 DragonsNest nest = new DragonsNest(); 8 9 System.out.println("ドラゴンのバトルを始めます"); 10 11 try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 12 13 System.out.println("ID:\tドラゴン名"); 14 Attribute attrs[] = Attribute.values(); 15 for(int i=0; i<attrs.length; i++) System.out.println((i+1)+":\t"+attrs[i]); 16 17 System.out.print("自分が使用するドラゴンをidで選んでください>"); 18 int choiceMyDragon = Integer.parseInt(br.readLine()) - 1; 19 Dragon myDragon = nest.summon(attrs[choiceMyDragon]); 20 21 System.out.print("相手に使用させるドラゴンをidで選んでください>"); 22 int choiceOpponentDragon = Integer.parseInt(br.readLine()) - 1; 23 Dragon oppoDragon = nest.summon(attrs[choiceOpponentDragon]); 24 25 doBattle(br, myDragon, oppoDragon); 26 27 } catch(Exception e) { 28 System.out.println("深刻なエラーが出ました. e="+e); 29 } 30 } 31 32 static void doBattle(BufferedReader br, Dragon myDragon, Dragon oppoDragon) throws IOException { 33 System.out.println("ドラゴンバトルをスタートします。"); 34 35 while(true) { 36 Action myAction = selectAction(br, myDragon); 37 System.out.println("こちらの攻撃!"); 38 if(attack(myDragon, myAction, oppoDragon) == 0) { 39 System.out.println("\n勝ちました!"); 40 break; 41 } 42 43 Action oppoAction = autoAction(oppoDragon); 44 System.out.println("相手の攻撃!"); 45 if(attack(oppoDragon, oppoAction, myDragon) == 0) { 46 System.out.println("\n負けました‥"); 47 break; 48 } 49 } 50 51 System.out.println("バトルが終了しました"); 52 } 53 /** アクションの選択(入力) */ 54 static Action selectAction(BufferedReader br, Dragon dragon) throws IOException { 55 while(true) { 56 System.out.println(); 57 System.out.println("コマンド: 技名 (残りポイント)"); 58 for(int i=0; i<dragon.getActionCount(); i++) { 59 System.out.println((i+1)+": "+dragon.getAction(i)+" ("+dragon.getActionPoint(i)+")"); 60 } 61 System.out.println("技を選んでください>"); 62 int actionNo = Integer.parseInt(br.readLine()) - 1; 63 64 int actionPoint = dragon.getActionPoint(actionNo); 65 if(actionPoint == 0) { 66 System.out.println("その技はもう残りポイントがありません"); 67 continue; //再選択 68 } 69 70 dragon.setActionPoint(actionNo, actionPoint - 1); 71 72 return dragon.getAction(actionNo); 73 } 74 } 75 /** アクションの選択(自動) */ 76 static Action autoAction(Dragon dragon) { 77 //ポイントが残っている技の中からランダムに選択 78 List<Integer> actionNoList = new ArrayList<>(); 79 for(int i=0; i<dragon.getActionCount(); i++) if(dragon.getActionPoint(i) >= 1) actionNoList.add(i); 80 Collections.shuffle(actionNoList); 81 int actionNo = actionNoList.get(0); 82 83 int actionPoint = dragon.getActionPoint(actionNo); 84 dragon.setActionPoint(actionNo, actionPoint - 1); 85 86 return dragon.getAction(actionNo); 87 } 88 /** オフェンスからディフェンスへのアクション */ 89 static int attack(Dragon offence, Action action, Dragon defence) { 90 System.out.println(offence+"の"+action+"!!"); 91 92 int leftHitPoint = Math.max(defence.getHitPoint() - action.power, 0); 93 defence.setHitPoint(leftHitPoint); 94 System.out.println(defence+"は"+action.power+"のダメージで残り体力が"+leftHitPoint+"になった!"); 95 96 return leftHitPoint; 97 } 98}

DragonsNest.java

java

1/** 2 * ドラゴンの巣. 3 * 各種属性のドラゴンを召喚することが出来る. 4 */ 5class DragonsNest { 6 /** ドラゴンの実体 */ 7 private static class DragonImpl implements Dragon { 8 private final Attribute attribute; 9 private int hitPoint; 10 private int[] actionPoint; 11 12 private DragonImpl(Attribute attribute) { 13 this.attribute = attribute; 14 this.hitPoint = attribute.hitPoint; 15 this.actionPoint = new int[attribute.actions.length]; 16 for(int i=0; i<actionPoint.length; i++) this.actionPoint[i] = attribute.actions[i].actionPoint; 17 } 18 19 @Override 20 public int getHitPoint() { return hitPoint; } 21 @Override 22 public void setHitPoint(int hp) { hitPoint = hp; } 23 24 @Override 25 public int getActionCount() { return actionPoint.length; } 26 @Override 27 public Action getAction(int i) { return attribute.actions[i]; } 28 @Override 29 public int getActionPoint(int i) { return actionPoint[i]; } 30 @Override 31 public void setActionPoint(int i, int ap) { actionPoint[i] = ap; } 32 33 @Override 34 public String toString() { return attribute.name(); } 35 } 36 /** 37 * 指定した属性のドラゴンを召喚. 38 * @param attr 属性 39 * @return ドラゴン 40 */ 41 Dragon summon(Attribute attr) { 42 return new DragonImpl(attr); 43 } 44}

Dragon.java

java

1/** ドラゴン */ 2interface Dragon { 3 int getHitPoint(); 4 void setHitPoint(int hp); 5 6 int getActionCount(); 7 Action getAction(int i); 8 int getActionPoint(int i); 9 void setActionPoint(int i, int ap); 10}

Action.java

java

1/** ドラゴンのアクション */ 2enum Action { 3 アタック(2,20), ホワイトブレス(4,2), ブルーブレス(3,2), レッドブレス(5,2), つよいアタック(6,1); 4 5 final int power; 6 final int actionPoint; 7 8 private Action(int power, int actionPoint) { 9 this.power = power; 10 this.actionPoint = actionPoint; 11 } 12}

Attribute.java

java

1/** ドラゴンの属性 */ 2enum Attribute { 3 ホワイトドラゴン(20, Action.アタック, Action.ホワイトブレス, Action.つよいアタック), 4 ブルードラゴン(25, Action.アタック, Action.ブルーブレス, Action.つよいアタック), 5 レッドドラゴン(15, Action.アタック, Action.レッドブレス, Action.つよいアタック); 6 7 final int hitPoint; 8 final Action[] actions; 9 10 Attribute(int hitPoint, Action... actions) { 11 this.hitPoint = hitPoint; 12 this.actions = actions; 13 } 14}

投稿2023/01/08 07:43

編集2023/01/08 08:18
jimbe

総合スコア12646

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

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

GANaki

2023/01/08 08:03

先程、コピペさせていただき、稼働確認できました。本当にありがとうございます。
GANaki

2023/01/09 01:34

重ね重ね申し訳ございません。 教えていただいたプログラムを使って勇者vsドラゴンのようなゲームを作りたいのですが、どのような変更を加えるとうまくいきますでしょうか…?
jimbe

2023/01/09 04:50

勇者vsドラゴンのようなゲームと言われても、世の中にはそのようなものは無数にあるわけで、どのようなものをイメージされているのか全く分からないのですが…。 回答のコードと qiita のコードを見ても分かると思いますが、表示や動きが同じに見えても中身は全く違います。どのようなモノを作るのかの仕様が同じでもその表現の仕方は無数にあるということで、例えば『山の絵を書きたいのですがどうすればうまく書けますか?』という質問をされたら、 GANaki さんならどうお答えになるでしょう。 技術的な面では、回答のコードは qiita のコードでは使われていない enum や interface 、 インナークラス,、可変長引数、 toString のオーバーライド等を使用しています。それらの使い方・使われ方はご理解されていますでしょうか。 プログラミング技術は、ただ写す(コピペする)だけでは上達しません。各々の部分を理解した上で組み合わさってどうなるのかを積み重ねて理解する必要があります。 回答で「違うコードを見ることもなにかになるかも」と書きましたのは、そういった理解する機会の発端として、まずやったことがないことがあることを知るタイミングになるかもということでした。 teratail 的には、具体的な問題・コードによる質問が推奨です。「○○をしたいがどうしたら良いでしょう」とだけ質問したら、まず間違いなく丸投げとして修正依頼が書かれるでしょう。
GANaki

2023/01/09 06:26

申し訳ございません。 わからないことだらけで失礼な質問の仕方をしてしまいました。。 もしよろしければ、教えていただいたコードに関して1点質問させてください。 DragonsNest.javaについです。 こちらクラス名はDragonsNestだと思いますが、子クラス?DragonImplを作成してるのはなぜでしょうか? ここの部分を自分が理解できておらず、流用の仕方があやまってるのだと思いますが、コンパイル後に実行しようとした際にmainクラスからDragonsNestのクラスにアクセスできないため、エラー(illeagalacceserror)となってしまいます。 ※記載のコードは問題なく稼働してます。
jimbe

2023/01/09 07:46 編集

私のコードについてのご質問なら、全く問題ありません。 DragonsNest クラスは、"ドラゴン"オブジェクトの生成用です。 単にドラゴンオブジェクトを生成するだけなら DragonsNest が無くても Dragon myDragon = new DragonImpl(Attribute.ホワイトドラゴン); と出来るようにも書けますし、DragonImpl というクラス名は格好悪いので Dragon インターフェースをクラスにして DragonImpl の中身を移植し Dragon myDragon = new Dragon(Attribute.ホワイトドラゴン); で済むようにも出来ます。 ですが、プログラムの構造は何も機械的なものだけで無く、時にはそのプログラム自体の動作によって表そうとする世界観を共用する形にも出来ます。( Dragon という名前もそうですよね。) "ドラゴンの巣"というクラスやオブジェクトがあり、 "召喚" というメソッドでドラゴンを呼び出すという動きは、このゲームのプログラムとしては理に適っているのではと思いました。
guest

0

イメージ説明

投稿2023/01/08 03:28

GANaki

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問