今からはじめるプログラミング16(休憩)
お絵かきしようと思っていたのですが、たまにはもう少し実生活に役立つプログラムを作ってみようかな、と思って、ニュースをみていたら、投資関係のニュースで、「72の法則」というダイアモンドオンラインの記事の中に簡単そうな数式を見つけたので、これをプログラムしてみます。
なんでも500年も使われ続けているということで、凄そうだな、と思ったのですが、そんなに難しいことではなく、
「元本が一定の成長率(利率)のもと2倍になるまでの年数」
そんな数値が何の役に立つかは、僕にはあまりわからないけれど、シンプルなのがいいです。
基本的には72を成長率で割ればOKということです。
これだと全く、簡単過ぎてプログラムするほどでもないじゃん。
という感じだけれど、
「エックハルト=マクヘイルの2次法則」と呼ばれる数式を使うとより正確になる、ということで。
これをプログラムしてみました。
Sample8
-------------------------------------------
package sample8;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
* @auther matsui
* @since 2021/4/20
* なんか役立ちそうなプログラム
*
* ****/
public class Sample8 extends JFrame implements ActionListener {
private JTextField years = new JTextField();
private JTextField growthrate = new JTextField();
/**
* コンストラクタ
*/
public Sample8() {
this.setTitle("元本が2倍になるまでの年数");
Container cont = this.getContentPane();
this.setLayout(new FlowLayout());
JLabel lbl1 = new JLabel("成長率(利率)");
JButton btn = new JButton("calc");
JLabel lbl = new JLabel("年数");
JLabel lbl2 = new JLabel("年");
//サイズ設定
lbl1.setPreferredSize(new Dimension(50, 20));
growthrate.setPreferredSize(new Dimension(50, 20));
lbl.setPreferredSize(new Dimension(50, 20));
years.setPreferredSize(new Dimension(50, 20));
btn.setPreferredSize(new Dimension(50, 20));
lbl2.setPreferredSize(new Dimension(50, 20));
//ボタンをリスナーへ設定
btn.addActionListener(this);
//画面へ貼り付け
cont.add(lbl1);
cont.add(growthrate);
cont.add(btn);
cont.add(lbl);
cont.add(years);
cont.add(lbl2);
//画面サイズ
this.setSize(new Dimension(400, 400));
//罰ボタンクローズ
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//表示
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//入力された値を取得
int iInput1 = Integer.parseInt(growthrate.getText());
//画面で入力された年数を引数に、計算を実行
double answer = calc(iInput1);
String sAnswer = String.valueOf(answer);
//適当すぎる「まるめ」
sAnswer = sAnswer.substring(0, 4);
years.setText(sAnswer);
}
/**
* 「エックハルト=マクヘイルの二次法則」<br>
* t = 69.3 / r * 200 / ( 200 - r )<br>
* @param r
* @return
*/
private double calc(int r) {
double ans = 69.3 / r;
double tmp = 200 - r;
tmp = 200 / tmp;
ans = ans * tmp;
return ans;
}
public static void main(String arguments[]) {
new Sample8();
}
}
-------------------------------------------
なんというか、最初にJavaの研修で作った電卓を彷彿とさせるプログラムです。
とりあえず、 参考にした記事です。
資産を100倍にする超シンプルな数学 | 億万長者だけが知っている教養としての数学 | ダイヤモンド・オンライン
書籍はこちら