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

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

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

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

Q&A

解決済

6回答

2710閲覧

returnの戻り値

Tutti

総合スコア83

Java

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

1グッド

1クリップ

投稿2016/07/08 04:27

class Keisan { public int mthTest(int input1, int input2, int input3){ int sum = (input1 + input2 + input3); return sum; } class Test011 { public static void main(String args[]) { int input1 = 10; int input2 = 20; int input3 = 30; int sum = 0; // 計算クラスの呼び出し Keisan keisan = new Keisan(); sum = keisan.mthTest(input1, input2, input3); System.out.println("合計は" + sum + "です"); } }

ここでのreturnで戻した戻り値なんですけど、mainクラスが下にあるのに、なぜreturnが必要なんですか?mainクラスに戻すからですか?
っという疑問が沸いてきました。
なぜ必要なのか教えていただけませんか?

mondaminZ👍を押しています

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

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

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

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

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

guest

回答6

0

処理はソースの上の記載から下に流れているわけではありません。
メソッドの位置を逆転しても結果は同じです。
個人的には、publicのメソッドを上に、privateを下に書く現場が多いですね。

投稿2016/07/08 08:48

msd

総合スコア95

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

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

Tutti

2016/07/11 08:01

そうなんですね!今後のためにも、覚えておきます。貴重な意見をありがとうございます。
guest

0

Test011クラスのmainメソッドからは、Keisanクラスとそのクラスが持つメソッドの仕様(名称・引数・戻り値)しか把握できず、mthTestメソッド内部で何をしているかを見ることが出来ません。
プログラムの記述順は関係なく、{}で囲まれた範囲外のことは、publicやprotected等の公開されている情報しか利用できません。

下記サイトを参照下さい。
入門書が教えてくれないJavaスコープ編

スコープとは大雑把に言えば変数やメソッドなどが見える範囲のことを指す。

投稿2016/07/08 04:51

dsuzuki

総合スコア1682

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

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

Tutti

2016/07/11 08:02

わざわざ引用まで準備していただき、ありがとうございます!助かります!
guest

0

ベストアンサー

メソッドを絵に書いて例えてみましょう。

★mthTestの場合 【上からデータを入れる口が3つ】 \input1/\input2/\input3/ ┏━━━━━━━━━━━━━━┓ ┃ mthTest ┃ ┃ ┏━┓ ┣━━━━┓ ┃実行ボタン→┃○┃ ┃戻り値 ┃ 【出口が1つ】 ┃ ┗━┛ ┣━━━━┛ ┗━━━━━━━━━━━━━━┛

メソッドにはデータの入り口となる**「引数」がいくつか存在し(あるいは1つもない)、
メソッドには
データの出口となる「戻り値」が1つだけ存在します(あるいは1つもない)。
データの入り口からデータを入れて、実行ボタンを押すと、戻り値としてデータが返ってくる仕組み、それがメソッドです(入り口も出口もない、実行ボタンだけがあるメソッドも存在します)。
実際にプログラム上で実行ボタンを押す、のと同様の意味を持つコードは
メソッド名の後ろに()をつけた時であり、入り口へのデータ投入は()の中に1つずつ書き**、出口からの受け取りは**=で左辺で受け取る**ことを指します。

呼び出して使う側(mainメソッド)から見てみると、mthTestはその箱の形しか見えていません。箱の中身の計算部分は見えていない、中でどんな変数が作られ、何が起きているかは見えていません。中でどんな計算をしていようと、受け取れるデータはreturnで返した戻り値だけです。例え、mthTestの中で「int sum」と変数を作ったところで、mainからはそれを見ることは出来ません。だって箱の中の話ですから。だから、計算結果をmainに渡したいのであれば、returnで返す必要があるのです。

投稿2016/07/08 04:50

編集2016/07/08 04:54
masaya_ohashi

総合スコア9206

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

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

Tutti

2016/07/11 08:04

なるほど!!!!!!分かりやすい説明と、イラストまで描いてくださり、ありがとうございます!とても助かりました!!!
guest

0

returnとは処理を呼び出し元に返して、値を返すためにあります。
javaでは戻り値は常に0個(void)か1個(void以外)です。複数の値を返すことはできません。

サンプル1

java

1public int mthTest(int input1, int input2, int input3){ 2 int sum = (input1 + input2 + input3); 3 return 1; 4}

サンプル2

java

1int get(int i){ 2 if(i < 0){ 3 return -1; 4 } 5 return 1; 6}

サンプル2はマイナスなら-1、プラスか0なら1を返すプログラムです。

確かに最後にreturnを書くと、必ず一つの変数を返却するように見えるかもしれません。
ですが、サンプル1のように処理とは全く関係のない値を返したり、サンプル2のように分岐によって違う値を返したりもします。

通常、returnは呼ばれた時点でメソッドの処理を抜けて戻り値を返します。
ですがvoid型のメソッドだけは、return;とだけ書くことによって値を返さず処理を抜けることができます。

java

1public static void main(String... args){ 2 if(args.length == 0){ 3 return;//値は返さない 4 } 5 System.out.print("コマンドライン引数があります"); 6}

もちろん他の方法でも実装できますが、こういう書き方も可能です。

投稿2016/07/08 04:47

intelf___

総合スコア868

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

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

0

mthTest内のsumはmainからは不可視(スコープの範囲にない)です。従ってreturnで返さない場合、mainで結果を取得する方法がありません。・・・逆に、なぜreturnが不要と思ったのでしょうか?

投稿2016/07/08 04:40

cateye

総合スコア6851

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

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

0

言いたいのは、KeisanクラスのmthTestメソッドがなぜ戻り値を持っているか?でしょうか。

KeisanクラスおよびmthTestメソッドは現在mainメソッドの中で呼び出されています。
もしTest012というクラスが作られて同じ計算をしたい場合はそちらでもKeisanクラスのmthTestを呼び出すだけで合計値が取得できますね。

この場合はとても簡単な計算しか行っていないのでmainメソッド内に書けばよいと思われますが、
例えば、この計算結果をファイルに書き出してそのファイルを別のサーバーにアップして・・・など、
処理が大きくなってくると、たくさんの場所にその処理を書くのではなくmthTestメソッドを呼び出せばソースコードもすっきりすると思います。

絶対こうでなければいけない、ということではありません。

投稿2016/07/08 04:37

s.t.

総合スコア2021

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問