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

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

ただいまの
回答率

87.61%

mainメソッドから、別々の値をreturnで返したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 266

score 4

引数違いのsumメソッドを別に作らない状態で、
int sum(List<Integer> list1)をmainメソッドでコールして
1~1000の数値も計算できるようにしたいです。

分からないところは、コメントに書いております。

public class Exercise6 {

  public static void main(String[] args) {

    /**
     * 例題実行確認
     *
     * @param args コマンドライン引数
     *
     *        課題内容 数値のリスト(java.util.List)を受け取って、その合計を返すメソッド「sum」を作成してください。
     *        sumメソッドを使用して、以下の問題を解いてください。 ・以下の値を要素とするリストの合計を求める 25 9 11 74 36 52 7 19
     *        ・1から1000までの合計を求める <クラス・メソッド作成> ・リストの合計を求める「sum」メソッドを作成してください。
     *        ・sumメソッドはメインメソッドから呼び出してください。 <仕様> ・結果として、「■ 出力例」に記載の内容を表示する
     *
     *        ■ 出力例 数値リスト[25 9 11 74 36 52 7 19]の合計 : 233 1から1000の合計 : 500500
     *
     *
     *
     */

    List<Integer> list1 = new ArrayList<>(Arrays.asList(25, 9, 11, 74, 36, 52, 7, 19));

    System.out.println("数値リスト[25 9 11 74 36 52 7 19]の合計 : " + sum(list1));

  //本来なら、下記の1から1000の合計を求める式もsumメソッドに書きたいところだが、returnだと一つしか値を返せないため、mainに式を書いている。

    int calc = 0;

    for (int j = 0; j <= 1000; j++) {
      calc += j;
    }

    System.out.println("1から1000の合計 : " + calc);

  }

  private static int sum(List<Integer> list1) {

    int total = 0;

    for (int i = 0; i < list1.size(); i++) {
      total += list1.get(i);
    }

    return total;
    // ここでint型のtotalの値を、mainメソッドに返している

  }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dodox86

    2021/09/15 11:10 編集

    > とりあえず、sumメソッドをintではなくvoidにし、

    いや、課題自体が「その合計を返すメソッド「sum」を作成してください。」なので、それではダメなのではないでしょうか。あくまで"とりあえず" ですか?

    正直、ここでつまづかれているのがとても意外に思えるのですが、プログラミングについては課題をこなすのが主で、自分で書くことはほとんどなかった、というかんじなのでしょうか。(この質問は単なる好奇心でお聞きしているだけです)

    キャンセル

  • Sharifa

    2021/09/15 11:16

    プログラミングについては課題をこなしており、自分で自ら書くことはあまりなかったという見解で合っています。知識不足でお恥ずかしいですが、、、
    あくまで”とりあえず”の解決なので、teratailの質問は閉め切ろうと思っております。

    キャンセル

  • dodox86

    2021/09/15 11:19

    レスをいただきどうもありがとうございました。承知しました。

    キャンセル

回答 2

+1

int sum(List<Integer> list1)をmainメソッドでコールして
1~1000の数値も計算できるようにしたいです。

1から1000まで入ったListを作って、それを渡せばいいだけの話です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

まず、前提が違います。
そもそも、プログラミングは『こうかけばいい』と言うものではありません。

プログラムは魔法でもなんでもなく、人間が現実世界でやっている手順を逐一指示されながら処理しているだけの代物である』です。

言い換えると『現実世界のシミュレーション』です。

なので、とりあえずプログラミングは置いといて、現実世界で考えてみましょう。

数学の問題としてだったり、手作業でやる処理だったりとかですね。

とりあえず、今回は

■ { 25 9 11 74 36 52 7 19 } という数列の合計値を求める
■ 1から1000までの合計を求める

ですね。

では、便宜上、前者をNo.1、後者をNo.2としましょうか。

まずはNo.1をやってみましょう。

質問者さんならどうしますか?

数列なので等差数列の和とかのやつを使えればいいですが、今回は明らかに等差数列とかになりませんね。なので地道に一つ一つ計算するしかありません。

では、どのようにするでしょうか。

そう、

初項 + 第二項 + 第三項 + … 第n項

ですね。

で、計算するときは一気に計算する人もいるかもしれませんが、
私みたいな凡人には無理なので一つ一つ計算します。

初項 + 第二項 を計算し、ノートかなんかに記録しておく。これを『記録X』とします。

次に 記録X + 第三項 を計算します。そしてその結果を記録Xとして記録更新する。
さらに 記録X + 第四項 も同様に。

とやっていくと、最終的に記録Xが答えになりますね。

で、よくよく見ると、初項 + 第二項 以外は常に
記録X + <数字> というような規則性ですね。

でも、初項についても、記録X の初期値を0と考えると上記の規則性を満たしますね。

よって、記録X + <第i項の値> と考えることができます。

…ということで質問にあるsumメソッドになりますね。
ここまではできています。

ではNo.2も同様にやってみましょう。

すると、アルゴリズム自体は同じで、数列の各項や項数だけが違いますね。

毎回同じ処理を書くのは面倒です。
なのでこれをメソッド化しちゃいましょう。

そうすれば、sumメソッドとかみたいなメソッドに渡す値を変えるだけで処理ができます。これがメソッドの役割です。(厳密には関数の役割だが、Javaとかには無いので)

なので、一つのメソッドにつき一回だけしか動かせない…ではありません。
もし、その前提(一回しか使えない)なら、System.out.printlnメソッドとかは何者なのでしょうか。

そこを考えるとわかるはずです。

ーーーーーーーーーーーー

[追記1]

メソッドの基本形は、■を半角スペースと見立てて書くと、

アクセス修飾子■メソッドの型■メソッド名(引数…){
    // なんらかの処理
return■戻り値;
}

です。

メソッドの型 = 戻り値の型

です。

mainメソッドのような、動かす側を『呼び出し側』とすると、
sumメソッドのような呼び出される側は、引数を受け取って処理をし、
呼び出し側に結果を返すことが求められることが多いです。今回みたいに。

その呼び出し側に結果を返すものを戻り値と言います。

では、今回の場合、処理結果とはなんでしょうか。

そう、『合計値』です。

上記のNo.1, No.2 のアルゴリズムを考えると、擬似コードで書くと、

0. (引数としてリストを受け取る)
1. リストの要素数分、以下をループする
    1.1. 追加していく
2. 戻り値を返す

のような感じになるはずです。違うのは(0)の引数だけです。
それ以外は完全に同じ。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/09/15 10:54

    なるほど、少し突破口が見えた気がします。もう一度練り直します。

    キャンセル

  • 2021/09/15 11:06

    あれから修正した結果、とりあえず、
    sumメソッドをintではなくvoidにし、
    System.out.printlnでNo.1とNo.2の計算を出せるよう書き直し、一応の解決が出来ましたので、お礼を申し上げます。ありがとうございました。

    キャンセル

  • 2021/09/15 11:31

    > sumメソッドをintではなくvoidにし

    それは要件を満たしていないのでダメでは?

    キャンセル

  • 2021/09/15 11:53

    その問題に関しては、出題者に直接伺い、要件を満たしていない場合、もう一度今度は自力での解決を目指そうと考えております。
    ご指摘ありがとうございます。

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る