問題J00152の解答例と解説 Java Lv.2

0からnまでの和(15分)


<解答例 1>

引数で指定された n の分だけfor 文のループを回すことと、変数を定義することがポイント。変数名は answer である必要はなく、プログラマが自分で決めていいよ。
そして、11行目は、まず左辺が計算され、その結果が右辺に代入されるよ。for 文の途中経過は以下のようになっているよ。



<解答例 2>

多くの人が for 文を使うと思うけど、純粋に最も優れているコードはこれだよ。0からnまでの和は数学的に考えるこれで出せるんだ。for文を使ったプログラムだと演算のオーダはO(n)になってnの大きさに依存する(つまりnが大きくなればなるほど時間がかかる)けど、このプログラムだとO(1)になってnに依存しないでいつも同じ定数時間で処理できるんだ。入門者の人は for 文を使った回答で十分だけど、本物のプログラマになるなら、こういう数学の知識もあった方が良いよ。


<解答例 3>

回答例1に対して9行目が変わっているよ。+= は、自分自身にある値を足したい時に、良く使うよ。


<解答例 4>

for 文のループに使う変数 i の定義を for 文のの外(6行目)ですることもできるよ。


<解答例 5>

for 文のループに使う変数 i に 1 を足す(インクリメントする)のをfor文の中(10行目)に書くこともできるよ。


<解答例 6>

多くの人が for 文を使うと思うけど、純粋に最も優れているコードはこれだよ。0からnまでの和は数学的に考えるこれで出せるんだ。for文を使ったプログラムだと演算のオーダはO(n)になってnの大きさに依存する(つまりnが大きくなればなるほど時間がかかる)けど、このプログラムだとO(1)になってnに依存しないでいつも同じ定数時間で処理できるんだ。入門者の人は for 文を使った回答で十分だけど、本物のプログラマになるなら、こういう数学の知識もあった方が良いよ。


<解答例 7> 不正解

はまってしまうのがこれ。Integer は、int とは違い、オブジェクトなんだ。コンパイルできてしまうから、Integer と int の違いが判らない人は何が悪いのか、わかりにくいよね。5行目は、変数をゼロで初期化しているつもりだけど、オブジェクトを null で初期化していることになってしまう。

Integer は、int 型を扱うためのラッパークラスというもので、int型を扱うときに便利なメソッドが用意されていたりするけど、int 型と同じように扱うことはできないんだ。ネットや教科書で良く調べてみよう。




初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録