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

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

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

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

Q&A

0回答

1028閲覧

2つのインスタンスから2つの数字を取得して足し算。その値を比較して大きい方を返すロジックが組めません。

kai0201

総合スコア5

Java

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

0グッド

0クリップ

投稿2020/10/13 03:58

編集2020/10/13 04:02

前提・実現したいこと

はじめまして。
最近Javaを勉強し始めましたkai0201を申します。
今Javaのある課題に取り組んでいるのですが、なかなかエラーが解決できず、
今回質問させていただきました。

課題内容は以下の通りです。
1.Testmainメソッド内で変数test3を宣言し、hikakuメソッドの戻り値を受け取る。

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

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

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

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

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

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

該当のソースコード

Java

1 2 3class Test1 { 4 5 // フィールド 6 private int a; 7 private int b; 8 9 // コンストラクタ 10 Test1(int a,int b) { 11 this.a = a; 12 this.b = b; 13 } 14 15 // メソッド 16 public int getA() { 17 return this.a ; 18 } 19 20 public int getB() { 21 return this.b ; 22 } 23} 24 25class Test2 { 26 27 // フィールド変数 28 public int[] result1; // 合計値を入れる変数 29 public int result2; // 比較した値を入れる変数 30 public int test; // 合計値が同じだった場合 31 32 // メソッド 33 public Test1 hikaku(Test1 a,Test1 b) { 34 35 // インスタンス 36 TestMain y = new TestMain(); 37 38 // getA,getBを取得して足し算 39 // 取得した値をresult[]に代入 40 int[] result1= {(a.getA() + b.getB())}; 41 42 if (result1[0] == result1[1]) { 43 44 // 合計値が同じだった場合 45 test = result1[0]; 46 47 }else { 48 // 合計値を比較 49 result2 = Math.max(result1[0], result1[1]); 50 } 51 // test3へ値を返す 52 return y.test3; 53 54 } 55} 56 57class TestMain { 58 59 // フィールド変数 60 public int test3; 61 62 public static void main(String[] args) { 63 // TODO 自動生成されたメソッド・スタブ 64 65 // Test1インスタンス 66 Test1 s = new Test1(5,6); 67 Test1 s2 = new Test1(5,7); 68 69 // Test2インスタンス 70 Test2 f = new Test2(); 71 72 // Test2.hikakuの呼び出し 73 Test1 test3 = f.hikaku(s,s2); 74 75 System.out.println((test3.getA()),(test3.getB())); 76 } 77 78}

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

eqlipce を使用しております。

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

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

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

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

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

maisumakun

2020/10/13 04:20

いま書かれたコードを実行して、どのような状況になるのですか?
kai0201

2020/10/13 04:31

ご連絡ありがとうございます。 現在実行いたしますと以下のエラーが表示されます。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at SampleProject/java_kadai_5.Test2.hikaku(Test1.java:42) at SampleProject/java_kadai_5.TestMain.main(Test1.java:73)
coco_bauer

2020/10/13 04:37

「受け取った2つのインスタンスのaとbの合計値を比較」という部分ですが、質問のコードでは" result1= {(a.getA() + b.getB())};"となっていて、一方のインスタンスのaと、もう一方のインスタンスのbの合計値が計算されています。 これが「2つのインスタンスのaとbの合計値」という事なのですか? また、a.getA()と b.getB()はどちらも整数(int)ですから、(a.getA() + b.getB())は一つの整数になります。それをresult1に代入して、result1[0]とresult1[1]を比較するというロジックは無理がありませんか?
kai0201

2020/10/13 04:52 編集

coco_bauer さんご連絡ありがとうございます。 " int[] result1= {(a.getA() + b.getB())};"はおっしゃる通り合計値を計算してそれを配列に格納する目的で記述しております。 1.配列を使用して2つのインスタンスの(a+b)合計値を格納。 // 配列に入れていく 2.格納した2つの合計値を比較。 //配列同士で足し算 3.比較して大きい方を戻り値として返す。 // Math.max()で配列内の大きい方を返す 4.同じだった場合は先に代入したほうを返す // 配列の値を(==)で比較 この流れでロジックを組んでみたいと考えていて、 ぱっと思いついたのが、この方法でした。 やっぱり無理がありますよね。。
dodox86

2020/10/13 04:55

「クラス型メソッド内のメソッド呼び出しがわかりません。」https://teratail.com/questions/297440 こちらの課題の発展形なのだと思いますが、コードに混乱があるでしょうか。 > 2.hikakuメソッド内で受け取った2つのインスタンスのaとbの合計値を比較し、大きい方を戻り値として返す。aとbの合計が一緒の場合は、先に受け取った方を返す。 文として、大きい方のTest1インスタンスを返すのか、大きい方のint型の値を返すのか、ちょっと判然としませんね。どちらとも取れます。コードもその混乱が見え隠れしているように思います。 なお、「課題内容」の1.~4. を逆から読んでいくと流れがスムーズに把握できますね。
kai0201

2020/10/13 05:03

dodox86さん ご連絡ありがとうございます。 先日ありがとうございました。 おっしゃる通り発展形になります。 あ、なるほど! 自分自身これは勘違いしていました。 大きい方のTest1インスタンスを返すのか、 または、 大きい方のint型の値を返すのか、 ここがおっしゃる通り混在しておりました。 ちょっと意識してもう一度課題に取り組んでみます!
dodox86

2020/10/13 05:10

@質問者 kai0201さん 課題文で、 > aとbの合計が一緒の場合は、先に受け取った方を返す。 ここだけ読むとTest1インスタンスを返すようにも思います。先のご質問の延長と考えると、Test1インスタンスでしょうかね。ご確認ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問