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

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

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

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

Q&A

解決済

2回答

582閲覧

簡易プログラムの出力結果に対する疑問

infra____

総合スコア90

Java

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

0グッド

0クリップ

投稿2020/10/30 05:08

下記プログラムは「スッキリわかるjava実践編」p131からの抜粋です。

出力結果(書籍記載)
装備:はがねの剣 ※質問箇所
clone()で複製します
コピー元の勇者の剣の名前を変えます
コピー元とコピー先の勇者の装備を表示します
コピー元:ひのきの棒/コピー先:ひのきの棒

なぜ、getName()でメソッドを呼び出しているのに、「装備:はがねの剣」となるのでしょうか?

java

1public class Main { 2 public static void main(String[] args) { 3 4 Hero h1 = new Hero("ミナト"); 5 6 Sword s = new Sword("はがねの剣"); 7     h1.setSword(s); 8 9 System.out.println("装備:" + h1.getSword().getName()); 10 11 System.out.println("clone()で複製します"); 12 13 Hero h2 = h1.clone(); /* ここで複製 */ 14 15 System.out.println("コピー元の勇者の剣の名前を変えます"); 16 17 h1.getSword().setName("ひのきの棒"); 18 19 System.out.println("コピー元とコピー先の勇者の装備を表示します"); 20 21 System.out.println("コピー元:" + h1.getSword().getName() + 22 "/コピー先:" + h2.getSword().getName()); 23 } 24}

java

1public class Hero implements Cloneable { 2 String name; // 名前 3 int hp; // HP 4 Sword sword; // 装備している武器 5 6 public Hero clone() { 7 Hero result = new Hero(name); 8 result.name = this.name; 9 result.hp = this.hp; 10 result.sword = this.sword; 11 return result; 12 } 13 14 public Hero(String name) { 15 this.name = name; 16 } 17 18 public Sword getSword() { 19 return sword; 20 } 21 22 public void setSword(Sword sword) { 23 this.sword = sword; 24 } 25 26 public String getName() { 27 return name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34}

java

1public class Sword { 2 private String name; 3 4 public Sword(String name) { 5 this.name = name; 6 } 7 8 public String getName() { 9 return name; 10 } 11 12 public void setName(String name) { 13 this.name = name; 14 } 15}

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

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

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

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

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

momon-ga

2020/10/30 05:14

なぜ?と聞かれたら、そう書いてあるとしか答えられないので、 ”こうなると思っていた”という想定を書いてください。 そうすると、勘違いしている部分を指摘しやすいです。
guest

回答2

0

ベストアンサー

h1.getSword().getName()でgetName()の戻り値(ミナト)が出力されていないのはなぜでしょうか?

ミナトは、h1.getNmae()の場合です。

Sword s = new Sword("はがねの剣");

h1.setSword(s);

とあるので、

System.out.println("装備:" + h1.getSword().getName());

は、

java

1s = h1.getSword(); 2System.out.println("装備:" + s.getName());

と同じになります。

投稿2020/10/30 07:13

momon-ga

総合スコア4826

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

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

0

疑問の観点が良く分かりませんけど、事前にセットしてますよ?

Sword s = new Sword("はがねの剣");      h1.setSword(s); System.out.println("装備:" + h1.getSword().getName());

投稿2020/10/30 05:10

m.ts10806

総合スコア80875

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

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

infra____

2020/10/30 05:28

コメントありがとうございます。 h1.getSword().getName()でgetName()の戻り値(ミナト)が出力されていないのはなぜでしょうか?
m.ts10806

2020/10/30 05:30

なぜって、そう作ってるじゃないですか。 「ミナト」はHero.nameにセットされるように作ってますよ。
m.ts10806

2020/10/30 05:35

とりあえず、デバッグ覚えてください。書籍に依存しすぎて考えること調べること含めた基本的な部分全部抜けてます。
infra____

2020/10/30 05:40

かしこまりました。ご指摘ありがとうございます。
m.ts10806

2020/10/30 05:45 編集

伝わった感がないので一言 未解決の質問がたまってきてるところから、おそらく全然理解に繋がってないのではと思います。 理解する気がないのか、一発逆転満塁ホームランを信じているのか、その辺はよくわかりませんが 書いたとおりにしか動かないので、1つ1つ着実に解決していくことを強くすすめます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問