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

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

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

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

Q&A

解決済

2回答

1620閲覧

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

Sharifa

総合スコア5

Java

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

0グッド

0クリップ

投稿2021/09/15 00:47

編集2021/09/15 00:49

引数違いの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メソッドに返している } }

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

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

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

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

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

BeatStar

2021/09/15 00:51 編集

(読み間違えたようなので伏せる)
mike2mike4

2021/09/15 00:54

mainの戻り値がvoidなので戻り値はなにもありません。
dodox86

2021/09/15 00:56 編集

まぁ確かに、読んだ者には質問件名とやりたいことが一致していないように読めますね。 sum()メソッドはできている(ように見える)のですから、list1に1から1000の値を入れて呼べば良いのではないですか。ArrayListクラスの使い方が分からないというような質問に読めます。
ozwk

2021/09/15 01:06

>returnだと一つしか値を返せないため、mainに式を書いている。 ってあるので関数は一回しか呼べないと思っているのかも
Sharifa

2021/09/15 01:11

>ozwkさん まさしく、その通りでございます。 知識不足で大変お恥ずかしいです。。。 そんでもって1から1000をList1に入れるというアドバイスもありましたが、 まさか1から1000をいちいち書いていくってわけではありませんよね、、、? 一個ずつ書いていく方法しか、思いつかなくて、、、
Zuishin

2021/09/15 01:13

一個ずつ書いてください。 1000 までではなく 3 までで大丈夫です。 それができたら次の段階に進めます。
Sharifa

2021/09/15 01:17

一応、1,2,3と、3つまで書きました。 次はいかがいたしましょう、、、?
dodox86

2021/09/15 01:23

過去のご質問を見ると、以前の方がはるかに難しいことをやっているように見えるのですが、Javaの基本文法や基本的な制御(ifによる分岐とかループとか)は修められていないのでしょうか。
kaina

2021/09/15 01:26

もしかして1から1000を格納したListの作り方が分からないということ? もしそうであればfor文で1から1000までループして格納すれば良いだけですが。。。
Sharifa

2021/09/15 01:27

JavaはSilver8を取得しており、基礎的なことはある程度は抑えてはいるのですが、 ことこの問題に関しては、同じsumメソッドで返してほしいという指摘を受け、 どうするべきかと悩みましたので、ご質問させていただいた次第です、、、
Zuishin

2021/09/15 01:32

> 次はいかがいたしましょう、、、? 書いたのであればそれを実行し、意図通りに動くことを確認してください。 それができたのであれば、数値を一つずつ増やしながら繰り返し処理を行うよう変えてみましょう。 ここまで書いて新しいコメントを読みました。 シルバー取得者? 本当は何につまっているのかを正確に伝えることができていますか?
Sharifa

2021/09/15 01:52

あれからコードを書き直しましたが、 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> list = new ArrayList<>(Arrays.asList(25, 9, 11, 74, 36, 52, 7, 19)); System.out.println("数値リスト[25 9 11 74 36 52 7 19]の合計 : " + sum1(list)); System.out.println("1から1000の合計 : " + sum1(list)); } private static int sum1(List<Integer> list) { int total = 0; for (int i = 0; i < list.size(); i++) { total += list.get(i); } int calc = 0; for (int j = 0; j <= 1000; j++) { calc += j; } return total; // int型のcalcの値を、mainメソッドに返す // return calc;(到達不能コードによりエラー) // int型のtotalの値を、mainメソッドに返す } } と、このように到達不可能のエラーが出てきてしまいます。。。
Zuishin

2021/09/15 01:58

return total; で終了しているので当然到達不能です。 シルバーというのはブロンズの上ですよね?
Sharifa

2021/09/15 02:04

はい。上ですね、、、 あれから修正した結果、とりあえず、sumメソッドをintではなくvoidにし、 System.out.printlnで今回のListの中の数字の計算と、1~1000の合計の計算の2種類の答えを出せるよう書き直し、一応の解決が出来ましたので、この場を借りてお知らせします。
dodox86

2021/09/15 02:12 編集

> とりあえず、sumメソッドをintではなくvoidにし、 いや、課題自体が「その合計を返すメソッド「sum」を作成してください。」なので、それではダメなのではないでしょうか。あくまで"とりあえず" ですか? 正直、ここでつまづかれているのがとても意外に思えるのですが、プログラミングについては課題をこなすのが主で、自分で書くことはほとんどなかった、というかんじなのでしょうか。(この質問は単なる好奇心でお聞きしているだけです)
Sharifa

2021/09/15 02:16

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

2021/09/15 02:19

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

回答2

0

int sum(List<Integer> list1)をmainメソッドでコールして

1~1000の数値も計算できるようにしたいです。

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

投稿2021/09/15 00:51

maisumakun

総合スコア146018

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

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

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]

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

Java

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

です。

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

です。

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

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

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

そう、『合計値』です。

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

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

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

投稿2021/09/15 01:50

編集2021/09/15 05:15
BeatStar

総合スコア4962

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

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

Sharifa

2021/09/15 01:54

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

2021/09/15 02:06

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

2021/09/15 02:31

> sumメソッドをintではなくvoidにし それは要件を満たしていないのでダメでは?
Sharifa

2021/09/15 02:53

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問