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

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

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

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

Q&A

解決済

3回答

959閲覧

配列の学習をしていますが、コードの意味がわかりません。

talabagani

総合スコア50

Java

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

0グッド

1クリップ

投稿2021/07/07 22:02

編集2021/07/07 22:14

#[環境]
Java version 16.0.1
VS Code
Mac OS Big Surの環境です。
java -version
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
MacBook:09_MinutesToYearsandDayCalculator $

パソコン MacBook(Retina, 12-inch,2017), memory 8GB

#[エラー]

[学習状況]
2021年5月中旬から独学でJavaを学習しはじめました。
progateを3巡、ドットインストール1巡、スッキリJavaの本を8割読みました。現在、UdemyのJava Programming Masterclass for Software Developersというコースで動画を見たり、演習問題に取り組んでいます。
まだまだ初心者ですが真面目に取り組んでいるので、何卒、よろしくお願いします。

#[演習問題の内容]
配列の学習をしましょうという所で、Udemy教材の中で講師が説明しているコードの意味がわかりません。

#[わからない事]
特にわからないのは、7行目

java

1int[] myIntegers = getIntegers(5);

このgetIntegersはjava.langのなかにあるクラスのgetIntegersなのでしょうか?そしてこのCodeにはどんな役割があるのでしょうか?
配列を新規で作成するコードは

java

1int[] scores = new int[5]

みたいな具合だと思います。
new も必要だし、かっこも[]の形だと思います。

そして、13行目、

java

1public static int[] getIntegers(int number) {

自分で勝手に定義していメソッドの名前がgetIntegersですか?それとも前に出てくるgetIntegersと関連がありますか?
#[やってみたこと]
このページを参照してみました。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html

getInteger(String nm)
指定された名前のシステム・プロパティの整数値を判定します。

と書いてありました。
他のページでこのクラスの使い方とかを見てみたのですが、いまいち分かりませんでした。
#[コード]

java

1package com.timbuchalka; 2 3import java.util.Scanner; 4 5public class Main { 6 7 private static Scanner scanner = new Scanner(System.in); 8 public static void main(String[] args) { 9 int[] myIntegers = getIntegers(5); 10 //このgetIntegersはjava.langのなかにあるクラスのgetIntegers? 11 12 for(int i=0; i<myIntegers.length; i++) { 13 System.out.println("Element " + i +", typed value was " + myIntegers[i]); 14 } 15 System.out.println("The average is " + getAverage(myIntegers)); 16 } 17 18 public static int[] getIntegers(int number) { 19 //このgetIntegersと9行目のgetIntegersは関連がある?それとも自分で定義しているメソッドの名前? 20 System.out.println("Enter " + number + " integer values.\r"); 21 int[] values = new int[number]; 22 23 for(int i=0; i<values.length; i++) { 24 values[i] = scanner.nextInt(); 25 } 26 27 return values; 28 } 29 30 31} 32

イメージ説明
イメージ説明

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

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

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

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

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

Crimson_Tide

2021/07/07 22:28

コードは特に理由がなければMarkdown記法のコードブロック記法を使用してください
m.ts10806

2021/07/07 22:36

>エラー  としている項がただの挨拶になってますし、回答者にはほとんど不要な情報です。 質問に初心者タグついてるので要りません。 あとUdemyのことはUdemyへ問い合わせを。有料でやってる意味がない
K_3578

2021/07/08 00:11

どうでもいいけど学習状況書きたいならプロフィールにでも書いたらどうですか。
guest

回答3

0

このgetIntegersはjava.langのなかにあるクラスのgetIntegersなのでしょうか?

いいえ。

java.langの中にInteger(s)と複数形になったgetIntegersメソッドはありません。あるのはgetIntegerです。

ご覧になっているUdemyの教材の内容は質問者さん以外の第三者には分かりません。teratailでJavaに関して質問、回答している者が全て同じコースを体験している訳でもありません。[質問文中に画像付きで提示済みであり、余計であったので取り消し]~~ですので具体的なコードの位置を示しても分からないことがほとんどです。~~ですので想像ですが、intの要素をその配列として複数返す為getIntegers」と言う独自メソッドを定義して説明しているのだと思います。例えばHogeと言う何らかのオブジェクトを返す(呼び出し側にとっては"取得"する)メソッドの名前としてgetHoge、配列やリストで複数返すようなものではgetHogesのように名付けて定義するのはよくあることです。

恐らくですが、ご覧になっている教材では「int型の要素を複数取得するという目的のメソッドをgetIntegersと名付け、コードを読み易くするようコード自体を抽象化、文として具体的なメソッドに仕立て上げようとしているのだと思います。それを実際に「読み易い、理解し易い」と感じるかどうかはコードの設計と文脈、前後関係、読んだ当事者の学習状況を含む慣れによります。

そのgetIntegersメソッドのコードとしては恐らく以下のようなものでしょう。

Java

1static int[] getIntegers(int num) { 2 int[] array = new int[num]; 3 return array; 4}

それこそ一見、「なんでわざわざ面倒なコードにするの?」と思いがちですが、「numで表される指定の数のint型要素を配列で返す」と言うことをint[] getIntegers(int num);のメソッド仕様(設計)で一挙に示すことができます。また、必要に応じて引数のnumを利用し、より複雑な処理をした後、結果を返すこともできるようになります。


貼られた画像を見落としていたので追記しました:

getIntegersメソッドはそのMainクラス内においてintの複数の値をjava.util.Scannerで取り込む仕様ですね。まさに「複数のint値を取得する」という機能を表したメソッド名です。このように他のクラスでの名前とかぶることは良くあって、反対に言うとそれでも適切に名前付けができるようにパッケージやクラスと言うものがあります。で、同じ名前でも向かう対象、オブジェクトが違えば施す処理が違うかもしれない、オブジェクト指向、と繋がります。

投稿2021/07/07 23:13

編集2021/07/08 00:08
dodox86

総合スコア9183

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

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

talabagani

2021/07/08 10:19 編集

scannerで取り込んでいるのですが、スキャナーの初期化の時はいままでprivate staticをつけていませんでした。 今回private staticをつけることは大切なことなのでしょうか?
guest

0

ベストアンサー

配列の定義ですが、
確かに3行目もそうですが、4行目のように 既存の配列を 代入することもできます。
また7行目のような書き方もできます。
これはやや余談ですが、11行目のように代入すると配列が上書きされます。

java

11. public class Q348292 { 22. public static void main(String[] args) { 33. int[] scores = new int[5]; 44. int[] myIntegers = scores; 55. System.out.println(myIntegers[0] + " " + myIntegers[1] + " " +myIntegers.length); 66. 77. int[] id = {100, 101, 102}; 88. int[] myIntegers2 = id; 99. System.out.println(myIntegers2[0] + " " + myIntegers2[1] + " " +myIntegers2.length); 1010. 1111. myIntegers = myIntegers2; 1212. System.out.println(myIntegers[0] + " " + myIntegers[1] + " " +myIntegers.length); 1313. 1414. // byte[] arr_byte = new byte[3]; 1515. // myIntegers = arr_byte; // これは型が違うのでコンパイルエラー 1616. } 1717. 1818.}

結果

0 0 5
100 101 3
100 101 3

つまるところ

java

1int[] scores =

は scoresという名前のint型配列の変数名であり、そこにはint型配列であれば何かしらを代入できるわけです。

以上を踏まえた上で、

java

1int[] myIntegers = getIntegers(5);

これは myIntegersという変数名のint型配列を宣言しており、それに代入できるのはint型配列なので、getIntegers(5)はint型配列を表していると想像できます。

では、getIntegers(5)とは何ぞやとなるわけですが、調べられたjava.lang.String のgetIntegerメソッドを確認してみると
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html#getInteger-java.lang.String-
getInteger

public static Integer getInteger(String nm)

  • getIntegerメソッド はそもそも getIntegers とは名前が違う。
  • 引き数にStringを指定するので、数字を引数にしているgetIntegers(5)とは別物
  • 戻り値として Integer を返しており、 int型配列 を表すわけではない。
  • 使用するには Integer.getInteger()と指定しなければいけない(import static java.lang.Integer.*; または import static java.lang.Integer.getInteger;があれば、Integer.を付けずに、getInteger()単独で使用できるが static import文の記述はない)<※()内追記>

と、名前だけで十分ですが、これではないことは明らかです。

では、同じクラス内で定義している getIntegersメソッドを見ると

public static int[] getIntegers(int number) {

・getIntegersというメソッド名が一致していること
・引き数がint型の数字である
・戻り値がint型配列であること
・(staticメソッドであるので、インスタンス化しなくても使用できること)

以上のことから、このgetIntegersメソッドが以下で代入されているgetIntegersメソッドだと判断できます。

java

1int[] myIntegers = getIntegers(5);

投稿2021/07/07 23:36

編集2021/07/07 23:55
Crimson_Tide

総合スコア509

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

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

talabagani

2021/07/08 07:23

とても丁寧な説明、ありがとうございました。 わかってしまうと、なんでわからなかったんだろうと思うくらい合点がいきました。
guest

0

getIntegersgetIntegerは別の名前なので関係しません。

自分で勝手に定義していメソッドの名前がgetIntegersですか?

そうです。

new も必要だし、かっこも[]の形だと思います。

自分で勝手に定義している getIntegers は new を使っており、返り値の型に [] がついています。

投稿2021/07/07 22:51

sigsegv

総合スコア895

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問