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

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

ゼロから始めるJava学習 in バンコク その15 配列とforを使った「たし算」が分からない・・・

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

f:id:nobubkk:20180803142726p:plain

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

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

 

 

 

前回の問題「たし算せよ!」(#04:ループ配列を処理しよう)

paiza.jp

前回、 「ゼロから始めるJava学習 in バンコク その14 Java入門編4に突入!」で、演習問題のたし算でつまづいてしまった話を書いた。

ちなみに、問題はこれだ。

 

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

int sum=0;

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

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

}

System.out.println(sum);

 

要するに、15+28+39+45+70をループ処理forを使って計算するというものだ。

それがおとといの夜だったのだが、たしざんくらい明日になれば何か良い方法が見つかるだろうと軽い気持ちでいたのだが・・・む、むずかしい!

何度考えてもできない。

 

前回も書いたが、足し算ということは変数が2つ以上は必ず出てくるのでどう表せばよいのか。

そもそも変数2つを足すというアプローチが間違っているのか・・・

 

 

知り合いからmaxの求め方を尋ねられる

 そんなとき、知り合いからプログラミングで最大値の取り出し方を教えてほしいと連絡があった。

その質問をまだ勉強はじめて1か月にもならない儂にしてくること自体がそもそも間違っているのだが、頼られてしまったのならしょうがない。

グーグル先生に相談しながらいろいろ調べてみた。

 

すると、こんな風にすればよいことが分かったのだが、一度ちょっと書き出してみる。(自分の勉強のために)

int[ ] numbers={12,18,6,3,25,80,55};

int max=0;

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

if (numbers[i]>max) max=numbers[i];

}

System.out.println(max);

 

なるほど!

f:id:nobubkk:20180920134118j:plain

 

ループ処理の中で、配列の中身を一つずつmaxの数字と大きさ比べをしていくのか!

max=0と最初に定義したことが重要だったんだな。

最初にnumbers[0]とmaxの大きさ比べをして、もしnumbers[0]のほうが大きければ、maxの値をnumbers[0]の値に上書きする。

で次に、numbers[1]と上書きされたmaxの値の大きさ比べをして、もしnumbers[1]のほうが大きければmaxの値を上書きする・・・

ifで書かれているのでmaxのほうが大きければ上書きされない。

だから、最終的にmaxに入っている数字は配列の中にある最大値となる、という仕組みだった。

 

正直、最初はmax関数みたいなものがあって、それを入れれば自動的に見つけてくれるのかと思った。

よく考えたら、それはすでに作られた関数なので今はその関数をどう作るかの勉強をしていくことを再認識させられた。

そして、ちょっとコンピューターの知的レベル?を実感した気がする。

数字をぱっと見でどのくらいの大きさなのか?なんてことは認識できないんだな。

いや、とても当たり前で、知識としてはそういうものだということは知っていたが、今回実感として感じることができた。

やはり、なんでも頭の中で考えているだけではダメだな。

やってみて初めて実感として分かる、これが大事だ。

 

予期せぬ天の声が!

 さて、この問題は解決した。

しかし、重要な点はこの後に出てきていた。

上のコードの説明文の最後の文で「同じようにして合計、平均値などの計算もできます。」と書いてあるではないか!

 

この最大値を出すコードを理解することによって、合計の計算、つまり足し算も出すことができるのだ!

本当に儂を頼ってきてくれた知り合いにはありがとう!と言いたい。

おかげで「たしざん」という難問に対する突破口が見つかった。

 

今日は調べるぞ!・・・あれ?

これで何とかなると思ったのもつかの間。

昨日の夜はいろいろ考えてみたのだが、やはり何ともならなかった・・・

すくなくとも、最大値を調べるときにmax=0が重要だったように、sum=0も同じような働きをするに違いない。

・・・・・・

・・・・・・

・・・・・・

・・・・・・

・・・・・・

・・・・・・

あれ?もしかして、いま、分かったかもしれない。

 

 

そうか、そうだったのか!!

 

 

できてしまった。

 

int[ ] numbers={12,18,6,3,25,80,55};

int sum=0;

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

sum=sum+numbers[i];

}

System.out.println(sum);

 

 これでどうだ、実行!!

 

 199

 

 できたー!!

 

f:id:nobubkk:20180920141431j:plain

 

 そうか、そうだったのか、数学のような計算と違って、sum=sum+numbers[i]はsumの上書き(代入)だったんだな。

数学だと「x=x+2」なんて式はおかしいが、これがJavaだと「xにx+2を上書きしなさい」という命令になるのか。

 

f:id:nobubkk:20180920141732j:plain

無事このチャプターをクリアすることができた。

 

書いてる途中にできたからタイトルどうしようっかな?

「たし算が分からない・・・」

んー、まあこのままにしておこう。

 

 

 

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

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

 

 

 

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

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

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