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

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

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

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

プログラミング言語

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

Q&A

1回答

259閲覧

Java 実行について

nikkucc

総合スコア14

Java

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

プログラミング言語

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

0グッド

0クリップ

投稿2019/06/18 05:27

とあるサイトを使って、勉強のために少しプログラムを書いてみました。

こちらがサイトになります。→リンク
コンストラクタや、引数、戻り値などの勉強のためにやっております。基本的なことからあまり理解ができておらず、簡単なことかもしれませんが、よろしくお願い致します。

Java1

1package application; 2 3public class MyMain { 4 5 6 public static void main(String[] args) { 7 8 Actor Hero = new Actor("主人公",100,25,15); 9 10 Actor Enemy1 = new Actor("敵1",60,30,5); 11 12 Hero.setTarget(Enemy1); 13 Enemy1.setTarget(Hero); 14 Hero.start(); 15 Enemy1.start(); 16 } 17} 18 19

Java2

1package application; 2class Actor extends Thread{ 3 private int hitpoint; 4 private int offence; 5 private int deffence; 6 private String name; 7 private Actor target; 8 private int deley = 1; 9 10 public int getHitPoint() { 11 return hitpoint; 12 } 13 14 public int getOffence() { 15 return offence; 16 } 17 18 public int getDeffence() { 19 return deffence; 20 } 21 public Actor getTarget() { 22 return target; 23 } 24 25 public void setHitPoint(int hitpoint) { 26 this.hitpoint = hitpoint; 27 } 28 public void setAttack(int offence) { 29 this.offence = offence; 30 } 31 public void setDeffence(int deffence) { 32 this.deffence = deffence; 33 } 34 35 public void setTarget(Actor target) { 36 this.target = target; 37 } 38 public boolean isDead() { 39 return target.hitpoint<=0; 40 } 41 42 public Actor(String name,int hitpoint,int offence,int deffence) { 43 this.name = name; 44 this.hitpoint = hitpoint; 45 this.offence = offence; 46 this.deffence = deffence; 47 } 48 49 public void attack(Actor pActor) { 50 int damage = offence - pActor.getDeffence(); 51 if(damage >= 0) { 52 pActor.setHitPoint(pActor.getHitPoint()-damage); 53 System.out.println(name+"は"+pActor.getName()+"に"+damage+"のダメージを与えた!"); 54 55 }else if(damage<=0) { 56 System.out.println("ダメージを受けない"); 57 } 58 59 60 } 61 62 public void run() { 63 while(true) { 64 try { 65 sleep(100 * deley); 66 67 }catch(InterruptedException e) { 68 } 69 if(isDead()) 70 break; 71 } 72 attack(target); 73 } 74 }

こちらを実行すると、何も表示されません。デバッグで確認したところ、Hero.start() Enemy1.start()のどちらのメソッドも実行されずにそのまま処理が終了しています。
サイトを見ていて感じたことなのですが、そもそもstart()のようなメソッドは作成していないのでは、、と疑問に思いました。
Hero.run();に変更してデバッグを行うと、その行で止まってしまいます。
Hero.attack(target);
Enemy1.attack(target)
のように記載すると、一度ずつ実行されますが、サイトの趣旨とは異なってしまいます。
どのように表記するのが正しいのでしょうか。よろしければご回答お願い致します。

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

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

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

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

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

m.ts10806

2019/06/18 05:53

「実行について」だけのタイトルだとあまりにも範囲が広いのでもう少し起きている問題や実現したい機能に絞ってください。 <タイトル
nikkucc

2019/06/18 07:00

ご指摘ありがとうございます。 どのようなタイトルが良いか迷ったのですが、上手く表現できず、簡単にタイトルを決めてしまいました。
xebme

2019/06/20 10:45

スレッドについて無知なまま質問しています。このままだと時間を浪費するだけで 何も理解できないでしょう。スレッドが何本動くかも理解できていません。 ・Hero.start() Enemy1.start()のどちらのメソッドも実行されずにそのまま処理が終了しています。 mainスレッドが終わっただけではないのか。他のスレッドが生きているか確認して追記。 ・Hero.run();に変更してデバッグを行うと、その行で止まってしまいます。 run()の中のwhile(true)で無限ループしているので、while()のなかにブレークポイント設定して、追記。
guest

回答1

0

インデントを正しく入れましょう。
runまわりのインデントを整理するとこうなります。

java

1 public void run() { 2 while(true) { 3 try { 4 sleep(100 * deley); 5 6 }catch(InterruptedException e) { 7 } 8 if(isDead()) 9 break; 10 } 11 attack(target); 12 } 13}

if(isDead())の所でwhileが終わっています。

投稿2019/06/18 06:51

swordone

総合スコア20651

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

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

nikkucc

2019/06/18 07:05

回答ありがとうございます! とても見やすいですね。 現在は、少し作業が進み、別の問題が発生しており困っております。 よろしければ、Java eclipseの実行、デバッグについてという私の質問のソースコードを見て、回答を頂けたらありがたいのですが、 実行結果としてこのようなことになっております。 敵1はThread-0に15のダメージを与えた! 主人公はThread-1に20のダメージを与えた! 敵1はThread-0に15のダメージを与えた! 主人公はThread-1に20のダメージを与えた! 敵1はThread-0に15のダメージを与えた! 主人公はThread-1に20のダメージを与えた! Thread[Thread-1,5,main]を倒した! 敵1はThread-0に15のダメージを与えた! 敵1はThread-0に15のダメージを与えた! 敵1はThread-0に15のダメージを与えた! 敵1はThread-0に15のダメージを与えた! Thread[Thread-0,5,]を倒した! 本当はどちらかが倒された時点で終了するためのプログラムです。ご指摘いただいたようにif(isDead())で、whileを終わらせて終了という形になるはずだったのですが。。何が違うのか、ご指摘いただけるとありがたいです。 よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問