class Bank{ public static void main(String[] args){ int year; double rate=1.05; double money=10000.0; for(year=0;year<100;year++){ money*=rate; } System.out.println(year+"年後の預金は"+money+"円です"); } }実行結果は以下のようになる
ktanaka@ux019> java Bank 100年後の預金は1315012.5784630391円です
なお,この中で出てくる.money*=rate という式は,money=money*rate と同 じ意味である.この手の略記法はC言語にならっている.多くの2項演算子は,
x = x + y -> x += y x = x - y -> x -= y x = x * y -> x *= y x = x / y -> x /= y x = x % y -> x %= yのような略記法がある. 年利を1%から10%まで変化させた時はどうなるか.
double rate=1.05;の式を変更してコンパイルし直せばいいが,それは面倒くさい.このような場 合は,for文の中にfor文を入れるという二重のfor文で書くことができる.
class Bank{ public static void main(String[] args){ int year; int i; double rate; double money; for(i=1;i<=10;i++){ // 1.00+i/100.0でも良いが, 一般に除算よりも乗算の方が速度の面で望ましい. rate=1.00+i*0.01; money=10000.0; for(year=0;year<100;year++){ money=money*rate; } System.out.println(i+"%の利子で"+year+"年後の預金は"+money+"円です"); } } }実行結果は以下のようになる.
1%の利子で100年後の預金は27048.13829421526円です 2%の利子で100年後の預金は72446.46118252345円です 3%の利子で100年後の預金は192186.319808563円です 4%の利子で100年後の預金は505049.4818426959円です 5%の利子で100年後の預金は1315012.5784630391円です 6%の利子で100年後の預金は3393020.835144873円です 7%の利子で100年後の預金は8677163.255664174円です 8%の利子で100年後の預金は2.199761256341301E7円です 9%の利子で100年後の預金は5.5290407918259196E7円です 10%の利子で100年後の預金は1.3780612339822382E8円です表示結果の
8%の利子で100年後の預金は2.199761256341301E7円ですという部分が見苦しく見えるかもしれない.この表記は,
2.199761256341301E7 = 2.199761256341301 * 107という意味で,広い範囲の値を取りうる実数を表示する際の表記法である.
class Bank{ public static void main(String[] args){ int year; double rate=1.05; double money=10000.0; for(year=0;year<100;year++){ System.out.println(year+"年後の預金は"+money+"円です"); money=money*rate; } } }実行結果,
0年後の預金は10000.0円です ... 47年後の預金は99059.71092325839円です 48年後の預金は104012.69646942131円です ..を見ると,48年後だとわかる.しかし,せっかくコンピュータを使っているの に目で見て確かめるのは情けない.そこで,以下のようにプログラムを変更し てみる.
class Bank{ public static void main(String[] args){ int year; double rate=1.05; double money=10000.0; // 繰り返しのための条件を money<100000.0 に変更 for(year=0;money<100000.0;year++){ money=money*rate; } System.out.println(year+"年後の預金は"+money+"円です"); } }これを実行してみると,
ktanaka@ux019> java Bank 48年後の預金は104012.69646942131円ですとなる. このような繰り返し回数の確定しない繰り返し文を書く時に注意するのは,繰 り返しがいつかは終了するものにすることである.たとえば,利率が 0%とす ると,
class Bank{ public static void main(String[] args){ int year; double rate=1.00; double money=10000.0; for(year=0;money<100000.0;year++){ money=money*rate; } System.out.println(year+"年後の預金は"+money+"円です"); } }を実行すると,
ktanaka@ux019> java Bankといつまでたっても終了しない.このような時は,C-c(コントロールキーを押 しながらCを押す)で強制的に終了させることができる.
まず while文は
while (条件式) 文 のように記述して,条件式が満たされる間,文を実行するというもので,for(式1;式2;式3) 文の式1と式3がないのと同じ形である.慣習としては,繰り返し回数の決まっていない 繰り返しには,for文よりも,while文を使うことが多い.他に,do文というものがある,
do 文 while (条件式);のような構造を持つ. while文と違い, 最低1回は文を実行する点が 異なっている.文; while (条件式) 文;と同じ意味になる.
課題1 以下のプログラムは, 借金を年割で返済するのにかかる年数を求めるプログ ラムである.class Test{ public static void main(String[] argv){ int n; double rate=1.01; /* 利率 */ double a=10000.0; /* 借金の額 */ double y=200.0; /* 1年の返済額 */ n=0; while (a>0.0) { a = a*rate- y; n = n+1; System.out.println(n+"年後の借金の残りは"+a+"です"); } System.out.println(n+"年で返済できます"); } }課題をこなしたら, lectures.g99.cp1-ktanaka-W-Wed-5 のニュースグループに投稿すること.
- 利率,借金の額,1年の返済額をキーボードから入力できるようにプログラムを変更しなさい
- 以下のうちで一番返済に時間のかかる組合せを求めなさい
利率 1% 借金 10000 返済 200 利率 5% 借金 10000 返済 800 利率 10% 借金 10000 返済 1100 利率 20% 借金 10000 返済 2100