noblog!バンコク生活はなぜ良いのか

生のバンコク情報をおとどけ!

ゼロから始めるJava学習 in バンコク その14 Java入門編4に突入!配列、ループ配列

もうメシは食ったかの?儂はノブじゃ。

f:id:nobubkk:20180803142726p:plain

儂はいま「paizaラーニング」をメイン教材、「マンガPG」「ドットインストール」をサブ教材としてJavaの勉強に取り組んでいる。

プログラミング学習歴については、本格的なものはゼロであるが頑張って勉強していきたい。

 

 

 

 

Java入門編4へ

paiza.jp

前回Java入門編3が終わった記事を書いた。

「ゼロから始めるJava学習 in バンコク その13 Java入門編3しゅうりょうー!」

 

なので、ついにJava入門編4に突入した。

paizaラーニングのJava入門編は全部で10ある。

現在35%を学習したようだ。

f:id:nobubkk:20180918183250j:plain

 そういえば、いつの間にか「一流剣士」になっていた。

そうか、一流か・・・。

まだ何もできないが、「ダメ剣士」とかいう称号になっているよりは少しは気分がいい

ここは素直に、paizaラーニングに乗せられておこうと思う。

 

 配列

入門編4は「配列の基礎」という単元のようだ。

大規模なデータを扱うときにとっても便利なそうだ。

変数では一つの値しか決められなかったが、配列を使えば多くの値を一気に取り扱うことができるらしい。

 

 

#02:配列を作ろう

 #01は配列の説明だけだったので#02から。

String team={"戦士","忍者"};

System.out.println(team[0]);

System.out.println(team[1]);

 

これで

戦士

忍者

と順番に出力される。

 

まず、配列は[ ]を使う。

String[ ]で文字列の配列を使うという宣言。

その配列の名前をteamと決めて、その配列の中身は、戦士、忍者と定義した。

ここでこの{}の中身は、前から順に番号が振られ、0,1,2・・・と増えていく。

最初が0であることに注意しないといけない。

出力は、team[0]、team[1]で戦士、忍者の順に出力される。

 

さらに、先ほどのコードの前にplayerを追加しておくと、こういうこともできる。

String player="勇者";

String team={"戦士","忍者",player};

System.out.println(team[0]);

System.out.println(team[1]);

System.out.println(team[2]);

 

 配列のteamの中にplayerを追加してteam[2]を出力すると、その場所にあるplayerが出力されるが、そのplayerは勇者と定義されているので、出力結果は

戦士

忍者

勇者

と出力される。

 配列と変数は混在させても問題はないということだな、きっと。

 

 

 

#03:配列の要素を取り出してみよう

 まず冒頭前回とは違う配列の書き方から始まった。

String[ ] team;

team=new String[2];

team[0]="戦士";

team[1]="忍者";

System.out.println(team[0]);

System.out.println(team[1]);

これで前回と同様

戦士

忍者

出力される。 

 

 まず、こちらは配列名をteamと決める。

そして、team=new String[2];、ここで配列の中の要素が2つあるよと宣言してあげる。

ここが前回との違いになるようだ。

それから、一つずつ team[0], team[1]の要素を決めて出来上がり。

 

なぜこの2つの違いがあるのだろうか?

前回の書き方だと、数が増えたときに何番目なのかが分かりにくくなってしまうからかな?

数が少ない時には前回のほうが便利だと思うのだが、数が増えると何番目にどの要素なのかが分からなくなってしまうことがありそうだ。

またおいおい謎は解けていくのだろう。

 

そして前回と同じく、数字を指定しなくてもできる。

int num=0;

String[ ] team;

team=new String[2];

team[0]="戦士";

team[1]="忍者";

System.out.println(team[num]);

System.out.println(team[1]);

 

num変数を最初に指定して、そのnum変数を要素の番号のところに代入することも可能だ。

 

 

 

 

#04:ループ配列を処理しよう

また演習問題に躓いてしまった・・・

今回はlength、そしてforを扱う。

String[ ] team={"勇者","戦士","魔法使い"};

System.out.println(team[0]);

System.out.println(team[1]);

System.out.println(team[2]);

System.out.println(team.length);

 

これで、

勇者

戦士

魔法使い

3

と出力される。

team.lengthを使うと配列の中にある要素の個数を数えてくれるのだそうだ。

 

ただ、これは要素が3つくらいしかないので良いが、要素の数が増えてくるといちいちSystem.out.prin・・・と書いていくのは面倒なので、forを使ってループ処理で書き出してみたい。

String[ ] team={"勇者","戦士","魔法使い"};

 

System.out.println(team.length);

for(int i=0; i<team.length; i++){

System.out.println(team[i]);

 

}

 

これで、

3

勇者

戦士

魔法使い

と出力された。

 

天の声に少し納得

先日、問題が解けなかったときに天の声をいただいた。

その際に、あまり実務では不等号で<=の形は使わないと教えていただいたのだが、ここで少し納得した。

配列では常に0から始まるので、<=にしてしまうと一つ数が多くなってしまうのだろう。

それが<=を使わない原因の一つなのではないかと推測する。

 

演習問題でまた(儂にとっての)難問が・・・

いくつかの数字の合計値をforを使って計算しなさいという問題だ。

 

int[ ] numbers={15,28,39,45,70};

int sum=0;

for(int i=0; i<numbers.length; i++){

//ここに合計を計算するコードを記述

}

System.out.println(sum);

 

むむむ、難問である。

別のサイトの教えによると、int sum=0;は、最初にこうしておくものらしい。

なぜかは分からないがそう覚えておこう。

 

この問題だが、例えば常に同じ数をかけるとか、累乗を求めるならわかる。

なぜなら、変わっていく数は一つしかないからだ。

例えば、かけ算ならnum[0]*5、累乗ならnum[i]*num[i]でいいだろう。

 

ところが、足し算ということは少なくとも2つは変わっていく数がでてきてしまう。

要素の個数が分かっていれば、力ずくで全部足すことも可能だが、

sum=numbers[0]+numbers[1]+numbers[2]+numbers[3]+numbers[4];

お題でforを使うことが指定されているので、繰り返し処理の中に指定された要素を(少なくとも)二つ表示させないといけない。

 

 

numbers[i]でループ1回ごとに数字が変わるが、それを足すとはどうすればいいのだろうか?

謎である。

また少し考えてみたい。

 

 

これからプログラミングの勉強を始めようと思っている方、ぜひ一緒にやっていきましょう。

今宵はここまで。また次を楽しみにしておれ。

 

 

 

 ページを閉じる前に、クリックしてから閉じてね。よろしくお願いします!

にほんブログ村 海外生活ブログ タイ情報へ
にほんブログ村

にほんブログ村 海外生活ブログへ
にほんブログ村