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

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

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

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

Q&A

解決済

1回答

237閲覧

メソッドの呼び出しについて

nainai

総合スコア18

Java

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

0グッド

0クリップ

投稿2019/01/24 14:30

前提・実現したいこと

生成したメソッドのフィールドをsetterメソッドを使って設定したいと思っています。

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

"chを解決できません" "oを解決できません" "hを解決できません" と表示される

該当のソースコード

Java

1public class Main { 2 public static void main(String[] args) { 3 Molecule o = new Molecule("O2", 5, 10); 4 Molecule h = new Molecule("H2", 2, 8); 5 Molecule ch = new Molecule("H2O"); 6 } 7} 8 9public class Molecule { 10 private String name; 11 private int weight; 12 private int sec; 13 14 public Molecule(String name) { 15 this.name = name; 16 } 17 18 public Molecule(String name, int weight, int sec) { 19 this(name); 20 this.weight = weight; 21 this.sec = sec; 22 } 23 24 //getterメソッド 25 public String getName() { 26 return this.name; 27 } 28 public int getWeight() { 29 return this.weight; 30 } 31 public int getSec() { 32 return this.sec; 33 } 34 //setterメソッド 35 public void setName(String name) { 36 this.name = name; 37 } 38 public void setWeight(int weight) { 39 this.weight = weight; 40 } 41 public void setSec(int sec) { 42 this.sec = sec; 43 } 44 public void chemical(Molecule a1, Molecule a2) { 45 System.out.println(a1 + "と" + a2 + "が化学反応を起こした!"); 46 ch.setWeight(o.getWeight() + h.getWeight()); 47 } 48}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Eclipseを使っています

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

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

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

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

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

guest

回答1

0

ベストアンサー

半分勘ですけれど。

Diff

1public class Molecule { 2 ... 3 4 public void chemical(Molecule a1, Molecule a2) { 5 System.out.println(a1 + "と" + a2 + "が化学反応を起こした!"); 6- ch.setWeight(o.getWeight() + h.getWeight()); 7+ setWeight(a1.getWeight() + a2.getWeight()); 8 } 9}

chemicalメソッド内からは、mainメソッドの変数は参照できません。

メソッドの呼び出しについて

定義しているだけで呼び出していないですけれど、そのあたりは問題無く理解できているでしょうか。


また、各セッターの可視性はprivateにした方が良いでしょう。
あるいはそもそも必要無いのかもしれません。

このままでは外部からいくらでも質量を変更できる分子が爆誕します。

投稿2019/01/24 14:32

編集2019/01/24 14:44
LouiS0616

総合スコア35660

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

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

nainai

2019/01/24 14:52

回答ありがとうございます。 たしかにそのとおりですね。 しかし、この場合chemicalメソッドを引数をoとhにして呼び出したらエラーで「メソッド chemical(Molecule, Molecule) は型 Molecule で未定義です」と出てしまいました。Moleculeクラスでchemicalメソッドを定義したはずなのですが、これはなぜなのでしょうか?
LouiS0616

2019/01/24 14:53

chemicalメソッドはどこから呼び出しましたか?
nainai

2019/01/24 14:55

public class Main { public static void main(String[] args) { Molecule o = new Molecule("O2", 5, 10); Molecule h = new Molecule("H2", 2, 8); Molecule ch = new Molecule("H2O"); ch.chemical(o,h); } } このように呼びました
LouiS0616

2019/01/24 14:59

再現できないです。https://wandbox.org/permlink/N2U2T986hMjP9R5I Molecule.javaを上書き保存し忘れているとか、そもそも別のファイルをいじってしまっているとか、そういう凡ミスな気がします。再度ご確認ください。 ともすれば、キャッシュが悪さをしているのかもしれませんが。
nainai

2019/01/24 15:01

Main.javaの保存し忘れでした。 すみません、ありがとうございます。
LouiS0616

2019/01/24 15:41

解決されたようで何よりです。 よろしければ、BAをつけて質問をクローズしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問