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

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

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

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

Q&A

2回答

1246閲覧

javaで戻り値に配列を用いるでの疑問点

fdajo

総合スコア13

Java

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

0グッド

0クリップ

投稿2022/02/15 21:56

java学習中の者です。
すっきりわかるjavaの本で戻り値が配列の場合の箇所を読んでいます。
4行目のint[size]の使い方や、sizeが起動する場面がわかりません。
11行目のmakeArray (3)は要素の数だとおもいますが、具体的に何が入るのかわかりません。

詳細な流れを教えていただきたいです。

宜しくお願いいたします。

4 int [] newArray = new int [size];//sizeで指定された数の要素を持つ配列作成→sizeは何を指定しているのか。

11 int [] array = makeArray (3) ;//3つの要素を持つ配列を作成→3つの要素は何か。どこにきさいあるか。

1 public class Main { 2 public static int [] makeArray (int size) { 3 4 int [] newArray = new int [size];//sizeで指定された数の要素を持つ配列作成→sizeは何を指定しているのか。 5 for (int i = 0 ; i < newArray.length ; i++) { 6 newArray[i] = i ;//配列要素にインデクス番号と同じ値を入れる 7 } 8 return newArray ;//配列を返す 9 } 10 public static void main (String [] args) { 11 int [] array = makeArray (3) ;//3つの要素を持つ配列を作成→3つの要素は何か。どこにきさいあるか。 12 for (int i : array) { 13 System.out.println(i); 14 } 15 } 16 }

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

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

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

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

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

m.ts10806

2022/02/15 22:32

書かれているコメントの通りでは。 そのコメントが理解できてないと言うことでしょうか?
guest

回答2

0

4行目のint[size]の使い方や、sizeが起動する場面がわかりません。

「起動する」という表現を使った意図が分かりませんが、単なるそういう名前の変数です。
コードを見た限りメソッドの引数で渡されているint型の変数でしょう。
public static int [] makeArray (int size) {

11行目のmakeArray (3)は要素の数だとおもいますが、具体的に何が入るのかわかりません。

いえ、「makeArray()というメソッドに3という引数を与えている」だけです。
その引数がたまたまメソッド内でnewArray というint[]型変数が持つ要素数の定義に利用されているだけです。

Javaはmain()メソッドを持つクラスが実行されるので、追うならmain()メソッドからです。
見た目ソースコードの上から書いた順ではありません。
ただ、変数でもメソッドでもクラスでも定義されてない情報を利用しようとするとエラーになるので、手順的には定義を先に書いておいたほうが良いです。
どのような書籍なのか知らないですが、たまたまmain()メソッドが後に書かれてるだけです(多少紛らわしさはありますが文法的に間違いではないので)

プログラミングをする際はeclipseなどのIDEを入れてステップ実行できるようにされたほうが良いと思います。
本に書かれたコードを読むだけでは動くわけではないので、仕組みの理解はできません。

投稿2022/02/15 22:45

編集2022/02/16 00:28
m.ts10806

総合スコア80852

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

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

Zuishin

2022/02/15 23:27

> ただ、変数でもメソッドでもクラスでも定義されてない情報を利用できないので、定義を先に書きます。 C 言語だと確かにそうですが、Java もそうでしたっけ? そういう仕様なら関数プロトタイプ宣言が必要になるのでは?
m.ts10806

2022/02/15 23:52

定義してないメソッドや変数を呼び出そうとしてもコンパイルエラーになります。 ちょっと書き方悪かったですかね?
m.ts10806

2022/02/15 23:56

あくまでコーディングのときには使う機能や変数は先に定義を書きましょう、くらいのつもりでした。
Zuishin

2022/02/16 00:05

「先に」は時系列的にという意味だったんですね。 読み間違えていたようです。
m.ts10806

2022/02/16 00:26

ご指摘ありがとうございます。調整しておきます。
guest

0

とりあえずコードを読みましょう
コードを読むコツは『一行レベルで、その行が何をしているかを考えながら読む』です。

Java

1public class Main { 2 public static int [] makeArray (int size) { 3 iint [] newArray = new int [size];//sizeで指定された数の要素を持つ配列作成→sizeは何を指定しているのか。 4 for (int i = 0 ; i < newArray.length ; i++) { 5 newArray[i] = i ;//配列要素にインデクス番号と同じ値を入れる 6 } 7 return newArray ;//配列を返す 8 } 9 10 public static void main (String [] args) { 11 int [] array = makeArray (3) ;//3つの要素を持つ配列を作成→3つの要素は何か。どこにきさいあるか。 12 for (int i : array) { 13 System.out.println(i); 14 } 15 } 16}

まず、mainメソッド内から読みます。

Java

1 // mainメソッドの定義 2 public static void main (String [] args) { 3 // 配列を生成??? 4 int [] array = makeArray (3) ;//3つの要素を持つ配列を作成→3つの要素は何か。どこにきさいあるか。 5 // 配列内にあるデータを一個ずつ取り出し、 6 for (int i : array) { 7 // 出力 8 System.out.println(i); 9 } 10 }

これを疑似コードとして、書きだす。

1. 配列を生成??? 2. 配列内にあるデータを一個ずつ取り出し、 2.1. 出力

となりますね。この(1)がよくわからないですが。

で、元のこーどでは(1)で int [] array = makeArray (3) ;となっていますが、これはどういう意味でしょうか?
左辺を見ると、int[] array となっていますね。これは配列ですね。
右辺では makeArrayメソッドに3 というデータを渡して呼び出しています。

という事でmakeArrayメソッドとやらも同様に潜ってみましょう。

Java

1 // 仮引数sizeを引き受け、int型配列を返すmakeArrayメソッドの定義 2 public static int [] makeArray (int size) { 3 // size分、配列を確保 4 iint [] newArray = new int [size];//sizeで指定された数の要素を持つ配列作成→sizeは何を指定しているのか。 5 // 配列の大きさ分、ループしながら以下を処理 6 for (int i = 0 ; i < newArray.length ; i++) { 7 // 要素番号と同じデータをセット 8 newArray[i] = i ;//配列要素にインデクス番号と同じ値を入れる 9 } 10 // その結果(newArray)を返す 11 return newArray ; 12 }

これも疑似コードにしましょう。

[ 引数: int size, 戻り値: int[] ] i. size分、配列を確保 ii. 配列の大きさ分、ループしながら以下を処理 ii.i. 要素番号と同じデータをセット iii. その結果(newArray)を返す

で、実際にデータを入れて考えてみましょう。引数 size には 3 が入っているとします。

(i)で要素数3の配列が生成される。(ii)で i = 0 となりますね。
(ii.i)で newArray[i] = i;ですが、i = 0 なのでnewArray[0] = 0;ということになりますね。

つまり、

size = 3 (引数) i = 0 newArray = { 0 }

ですね。

さらに(ii)に戻って i++ するので i = 1 となる。条件式 i < newArray.lengthを満たすので(ii.i)に。
(ii.i)では、i = 1 なので newArray[1] = 1;となる。

よって、

size = 3 (引数) i = 1 newArray = { 0, 1 }

となる。さらに (ii)に戻って…と処理して、i = 3 のときに (ii)の条件式i < newArray.lengthをみたさないのでループは終了する。( 3 < 3 なので )

そしてそのまま(iii)に行き、return newArray; をして終了。
つまり、生成して値を設定した配列を返して終了。

で、呼び出し元であるmainメソッドに戻って int[] array = makeArray(3); の左辺 int[] arrayにセットされる。

と読んでいくと、makeArrayメソッドで要素数3 の配列( 中身は { 0, 1, 2 } となっている )を生成して返す。
その配列をmainメソッド側が受けとって表示しているだけですね。

読み方のコツとしては、『変数やオブジェクト、メソッドが何を指し示しているか』と『(変数やオブジェクト、メソッドの)スコープ等とデータの状態』を意識することです。

投稿2022/02/16 02:29

BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問