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

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

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

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

Q&A

解決済

2回答

4254閲覧

クラス型メソッド内のメソッド呼び出しがわかりません。

kai0201

総合スコア5

Java

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

0グッド

0クリップ

投稿2020/10/12 01:51

前提・実現したいこと

初めまして。最近Javaを学び始めたものです。

現在以下のようなプログラムを組んでおります。
1.
TestmainクラスのメインメソッドでTest1のインスタンスを作成する。作成時にaとbに値をセットすること。
2.
TestmainクラスのメインメソッドでTest2のインスタンスを作成する。
3.
Test2のcalcメソッドの引数にTest1のインスタンス渡し、Test1のaとbをそれぞれ+5する。
4.
Testmainクラスのメインメソッドでcalcメソッドの結果を出力する。

一応 3までは作り上げたのですが、
項目4についてのcalcメソッドの結果を出力する書き方が、分からず悩んでおります。
普通に呼び出すときは、
インスタンス名+メソッド名();
で値を表示することができるのは、理解できております。

しかし、Test2のcalcメソッドを呼び出す時どのように記述するのかが、
分からず挫けております。
そのため、質問させていただきました。
どなたかご協力をお願い致します。

該当のソースコード

class Test1 { // フィールド private int a; private int b; // コンストラクタ Test1(int a,int b) { this.a = a; this.b = b; } // メソッド public void setA(int a) { } public void setB(int b) { } public int getA() { return this.a ; } public int getB() { return this.b ; } } class Test2 { public static Test1 calc(Test1 test) { test.setA(test.getA()+5); test.setB(test.getB()+5); return test; } } class TestMain { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // インスタンス Test1 s = new Test1(4,5); Test2 f = new Test2(); System.out.println((f.calc(test))); //メソッド呼び出し } }

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

Eclipse を使用しております。

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

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

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

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

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

m.ts10806

2020/10/12 01:54

static などアクセス修飾子は理解されていますでしょうか。
kai0201

2020/10/12 01:58

static 理解できておりません。。。 アクセス修飾子は以下の public どこからでも呼び出せる protected 同じパッケージか、そのサブクラスからしか呼びだせない。 private 同じクラス内からしか呼びだせない。 この3つは理解できております。
m.ts10806

2020/10/12 01:59

ではそこからですね。
kai0201

2020/10/12 02:00

調べて参ります。 ありがとうございます。
guest

回答2

0

ベストアンサー

しかし、Test2のcalcメソッドを呼び出す時どのように記述するのかが、
分からず挫けております。

この部分の質問に答えるとすると、staticメソッドの呼び方は クラス名.メソッド()なので、
Test1 s2 = Test2.calc(new Test1(4, 5)); のような形になります。

Java

1class TestMain { 2 3 public static void main(String[] args) { 4 5 Test1 s = new Test1(4,5); 6 //いらない Test2 f = new Test2(); 7 //いらない System.out.println((f.calc(test))); //メソッド呼び出し 8 9 // Test2.calc() の呼び出し 10 Test1 s2 = Test2.calc(s); 11 12 // Test2.calc()の返り値はsと同じオブジェクトであることを検証。 13 assert(s == s2); 14 15 String str = String.format("Test1.a=%d, Test1.b=%d", s2.getA(), s2.getB()); 16 System.out.println(str); 17 } 18} 19

クラスにおけるstaticメソッドのユーティリティメソッドとしての使い方などは、先のm.ts10806さんの回答で案内されている記事を熟読するなどして理解してください。例えばTest1クラスにユーティリティメソッドとしてのstaticメソッドと一般的なインスタンスメソッドを追加するとすると、以下のようになると思います。

Java

1class Test1 { 2... 3 public static int calc(int v1, int v2) { 4 return v1 + v2; 5 } 6 7 public int calc() { 8 return calc(this.a, this.b); 9 }

投稿2020/10/12 02:29

dodox86

総合スコア9256

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

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

dodox86

2020/10/12 02:36

メソッド名の決め方(妥当性)は大事なことですが、例えば今回のcalc()は、質問者さんにとってTest2.calc()は「Test1インスタンスをaとbを追加したもの」を計算、すなわちcalcと名付けている意識です。が、私のサンプル、Test1クラスでcalc()と言う名前が適切かどうかはまた別問題です。add()の方が良いかもしれないし、そうでないかもしれない。その辺りはプログラミングを学んでいく上で少しずつ考えていけば良いと思います。
kai0201

2020/10/12 02:54

ご連絡ありがとうございます。 すごくわかりやすくご説明していただきありがとうございます。 calcの計算方法すっきり致しました!! staticメソッドの使い方メソッド名つけ方については dodox86様、ほかの回答者様の意見を参考にし、 たくさんコードを書いて血肉を着けて行きます!
guest

0

staticメソッドについて、このあたりの記事を確認してみれば良いかと思います。
Javaのstaticメソッドを丁寧に解説! 活用例や考え方も一緒に学ぼう!

投稿2020/10/12 02:00

m.ts10806

総合スコア80875

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

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

kai0201

2020/10/12 02:01

ご丁寧にありがとうございます! 参考にさせて頂きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問