

今Javaの問題に取り組んでいるのですが、なかなかエラーが解決できず、今回質問させていただきました。

内容は以下の通りです。

  1. Testmainのmainメソッド内でTest1のインスタンス2つとTest2のインスタンスを作成する。

  2. Test2のhikakuメソッドに作成した２つのTest1インスタンスを渡す。

  3. hikakuメソッド内で受け取った2つのインスタンスのaとbの合計値を比較し、大きい方を戻り値として返す。aとbの合計が一緒の場合は、先に受け取った方を返す。

  4. Testmainメソッド内で変数test3を宣言し、hikakuメソッドの戻り値を受け取る。  
test3のaとbをそれぞれコンソールに出力する。

現在そこそこ時間を割いて考えているのですが、分からずじまいです。  
（もしかしたら、とんちんかんなロジックを書いているかもしれません。）

また、特に私が頭を悩ませているのは、メソッドの戻り値を他のクラスのへ受け渡す際の return の書き方に悩んでおります。  
複数の return がある場合は、配列に格納して返すのが一般的なのでしょうか？

お手数をおかけしますが、ご教授お願い致します。

**該当のソースコード**

[code]

    class Test1 {
    
        // フィールド
        private int a;
        private int b;
    
        // コンストラクタ
        Test1(int a,int b) {
            this.a = a;
            this.b = b;
        }
    
        // メソッド
        public int getA() {
            return this.a ;
        }
    
        public int getB() {
            return this.b ;
        }
    }
    
    class Test2 {
    
        // メソッド
        public static Test1 hikaku(Test1 a,Test1 b) {
    
            // インスタンス
            int d = (a.getA() +a.getB()) ;
            int e = (b.getB() +b.getB()) ;
    
            if (d == e) {
                System.out.println(d);
                return a;
            }else {
                Math.max(d, e);
                return b;
            }
    
        }
    }
    
    class TestMain {
        // フィールド
        Object test3;
    
        public static void main(String[] args) {
            // TODO 自動生成されたメソッド・スタブ
    
            // Test1 インスタンス
            Test1 a = new Test1(5,7);
            Test1 b = new Test1(5,8);
    
            // hikakuメソッドの呼び出し
            Test1 f = Test2.hikaku(a, b);
    
            // コンソールに表示
            System.out.println();
    
        }
    }
    
[/code]


CC BY-SA 4.0
2020-10-14T00:27:51.983
71175
2020-10-14T01:25:15.663
2020-10-14T01:14:34.263
3060
42306
question
java
他クラスのメソッドに、２つのインスタンスを渡して処理。処理値を戻り値で再び受け取って表示させる方法について


エラーは発生しておらず、実行自体はできているけれど意図した値が取得できない状況を想定して回答します。  
※「コンパイルエラー」や「実行時エラー」が発生している場合は質問文にエラー内容をコピペして追記をお願いします。

> 1.Testmainのmainメソッド内でTest1のインスタンス2つとTest2のインスタンスを作成する。

Test2のインスタンスを作成していませんが、`hikaku`メソッドがstaticなので動作しています。  
要件を満たしているかご確認ください。動いていればOKならば問題ありません。

> 2.Test2のhikakuメソッドに作成した２つのTest1インスタンスを渡す。

できてます。

>
> 3.hikakuメソッド内で受け取った2つのインスタンスのaとbの合計値を比較し、大きい方を戻り値として返す。aとbの合計が一緒の場合は、先に受け取った方を返す。

質問文のコードには「aとbの合計値が一緒」かどうかを判別するロジックのみ実装されています。  
条件式を追加しましょう。

> 4.Testmainメソッド内で変数test3を宣言し、hikakuメソッドの戻り値を受け取る。  
>  test3のaとbをそれぞれコンソールに出力する。

Object型のtest3フィールドはいらない気がしますが、上段の処理は大体できてます。  
メソッド内で変数`test3`の代わりに変数`f`が宣言されています。  
下段は惜しいところです。  
`System.out.println();`の記述ではコンソールに改行を出力するだけです。  
`System.out.println(f.getA());`に書き換えると変数`f`のフィールド`a`をコンソールに出力します。  
`System.out.println(a.getB());`に書き換えると変数`a`のフィールド`b`をコンソールに出力します。(変数名がまぎらわしいことになっています)  
つまり「変数`f`の`a`をコンソールに出力する」記述を「test3のaとbをそれぞれコンソールに出力する」記述に書き換えることが課題の要点になりそうです。

> また、特に私が頭を悩ませているのは、メソッドの戻り値を他のクラスのへ受け渡す際の、  
>  return の書き方に悩んでおります。  
>  複数のreturnがある場合は、配列に格納して返すのが、一般的なのでしょうか？

複数のreturnがある場合は、配列に格納するか **インスタンスのフィールドに格納** して返すのが一般的です。  
お悩みの点は「aとbの二変数を両方返す方法が分からない」のだと予想しますが、すでに`hikaku`メソッドの戻り値として`Test1`クラスのインスタンスを返しているので(`hikaku`メソッドを正しく実装すれば)インスタンスの`a`と`b`フィールドの二変数を取得することができます。  
`Test1`クラスのフィールドはprivate変数として隠ぺいされていますが、`getA`メソッドなどのgetterを使って他のクラスからpublicアクセスできるようになっています。

『クラス』『インスタンス』『変数名』『メソッド』あたりの使い方がこんがらかってしまっているかもしれません。  
上記の単語を意識して教材のテキストや過去の演習用コードを読み返せば、あと少しで正解にたどり着けるコードに見えます。  
がんばってください！


CC BY-SA 4.0
2020-10-14T01:25:15.663
71177
2020-10-14T01:25:15.663
9820
71175
answer