ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのウィンドウ電卓

  • mixiチェック
  • このエントリーをはてなブックマークに追加
大学の課題でウィンドウ電卓を作成しているのですが、
初心者なので悪戦苦闘しています。
ボタンを押すとウィンドウにその数字が出力されるというところまでは出来ました。
ここに関数電卓のような機能を追加したいのですが、うまくいきません。
どなたか、この先どうしたらいいか教えてください。 
(もし、以下のプログラムを改良して関数電卓を完成させて頂けたらありがたいです。)
宜しくお願いします。

---プログラム---
import java.awt.*;
import java.awt.event.*;

public class WindowCalculator extends Frame implements ActionListener{
Frame frame = null;
TextField number = null;
Button button[] = new Button[10];
Button period = new Button(".");
Calculator calc = new Calculator();

public WindowCalculator(){
setLayout(new BorderLayout());
number = new TextField();
add(number, BorderLayout.CENTER);
Panel southPanel = new Panel();
southPanel.setLayout(new FlowLayout());
for(int i = 0; i < 10; i++){
button[i] = new Button(String.valueOf(i));
southPanel.add(button[i]);
    button[i].addActionListener(this);
}
southPanel.add(period);
    period.addActionListener(this);
add(southPanel, BorderLayout.SOUTH);
setSize(400, 100);
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == button[0]){
number.setText(number.getText() + "0");
}else if(e.getSource() == button[1]){
number.setText(number.getText() + "1");
}else if(e.getSource() == button[2]){
number.setText(number.getText() + "2");
}else if(e.getSource() == button[3]){
number.setText(number.getText() + "3");
}else if(e.getSource() == button[4]){
number.setText(number.getText() + "4");
}else if(e.getSource() == button[5]){
number.setText(number.getText() + "5");
}else if(e.getSource() == button[6]){
number.setText(number.getText() + "6");
}else if(e.getSource() == button[7]){
number.setText(number.getText() + "7");
}else if(e.getSource() == button[8]){
number.setText(number.getText() + "8");
}else if(e.getSource() == button[9]){
number.setText(number.getText() + "9");
}else if(e.getSource() == period){
if(number.getText().indexOf('.') < 0){
number.setText(number.getText() + ".");
}
}
}
// メイン
public static void main(String[] args){
new WindowCalculator();
}
}

コメント(3)

とりあえず、GUI周りだけでも完成させてみたらどうでしょう・・・?
ボタンの配置とか好みがあると思うので。
数字が配置できるのであれば、そんなに難しくないと思います。
とりあえず+-*/=と、欲しい関数ボタンくらいでしょうか。
以下のように改良しました。
・演算子のボタンを追加した。
・四則演算が出来るようにした。(結果が間違っている場合有り。)
・ボタンの配置を変えた。

続いて、以下のような機能、ボタン等を追加しようと思っているのですが、
どうしたらいいでしょうか?
・必ず正しい結果が得られるようにする。
 (0.2*3=0.6000000000000001のようにならないようにする。)
・整数同士の演算で結果が整数の場合は結果が整数で表示されるようにする。
 (1+2=3.0のような計算式を1+2=3と表示できるようにする。)
・(関数電卓の)機能をいくつかつける。
 (順列・組合せ計算、三角関数、対数、指数計算など)
・M+,M-,AC,C,MC,MRのボタンを追加する。
・(可能ならば、)不正な入力で=ボタンが押された場合は、計算を行わず、エラーをコマンドプロンプトで
 はなく、ウィンドウに表示する。
---プログラム---
import java.awt.*;
import java.awt.event.*;

public class WindowCalculator extends Frame implements ActionListener{
Frame frame = null;
TextField number = null;
Button button[] = new Button[10];
Button period = new Button(".");
Button operator[] = new Button[5];
boolean equal_flag = false;
Calculator calc = new Calculator();

public WindowCalculator(){
String operators[] = {"+", "-", "*", "/", "="};
setLayout(new BorderLayout());
number = new TextField();
add(number, BorderLayout.NORTH);
Panel southPanel = new Panel();
southPanel.setLayout(new GridLayout(4, 3));
for(int j = 2; j >= 0; j--){
for(int i = 1; i <= 3; i++){
button[i+j*3] = new Button(String.valueOf(i+j*3));
southPanel.add(button[i+j*3]);
button[i+j*3].addActionListener(this);
}
}
button[0] = new Button(String.valueOf(0));
southPanel.add(button[0]);
button[0].addActionListener(this);
southPanel.add(period);
period.addActionListener(this);
Panel rightPanel = new Panel();
add(southPanel, BorderLayout.CENTER);
rightPanel.setLayout(new GridLayout(5, 1));
for(int i = 0; i < 5; i++){
operator[i] = new Button(operators[i]);
rightPanel.add(operator[i]);
operator[i].addActionListener(this);
}
add(rightPanel, BorderLayout.EAST);
setSize(300, 250);
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){
int idx, op;
String str;
double n;
char operators[] = {'+', '-', '*', '/', '='};
if(equal_flag == true){
number.setText("");
equal_flag = false;
}
if(e.getSource() == button[0]){
number.setText(number.getText() + "0");
}else if(e.getSource() == button[1]){
number.setText(number.getText() + "1");
}else if(e.getSource() == button[2]){
number.setText(number.getText() + "2");
}else if(e.getSource() == button[3]){
number.setText(number.getText() + "3");
}else if(e.getSource() == button[4]){
number.setText(number.getText() + "4");
}else if(e.getSource() == button[5]){
number.setText(number.getText() + "5");
}else if(e.getSource() == button[6]){
number.setText(number.getText() + "6");
}else if(e.getSource() == button[7]){
number.setText(number.getText() + "7");
}else if(e.getSource() == button[8]){
number.setText(number.getText() + "8");
}else if(e.getSource() == button[9]){
number.setText(number.getText() + "9");
}else if(e.getSource() == period){
if(number.getText().indexOf('.') < 0){
number.setText(number.getText() + ".");
}
}else if(e.getSource() == operator[0]){
number.setText(number.getText() + "+");
}else if(e.getSource() == operator[1]){
number.setText(number.getText() + "-");
}else if(e.getSource() == operator[2]){
number.setText(number.getText() + "*");
}else if(e.getSource() == operator[3]){
number.setText(number.getText() + "/");
}else if(e.getSource() == operator[4]){
str = number.getText();
for(op = 0; op < operators.length; op++){
idx = str.indexOf(operators[op]);
if(idx >= 0){
if(idx > 0){
calc.register(Double.parseDouble(str.substring(0, idx)));
}
n = calc.calculate(operators[op], Double.parseDouble(str.substring(idx+1)));
number.setText(number.getText() + "=" + n + '\n');
equal_flag = true;
break;
}
}
}
}
public static void main(String[] args){
new WindowCalculator();
}
}

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング