忍者ブログ

からすまる日誌 java

実践2(7) 電子計算機

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

実践2(7) 電子計算機

今日の午後は演習。
今日の終わりまでに提出。
電子計算機を作る
 
・動くのが一番大事
・しょぼいもので動くものをつくってから、肉付けをしていくのがよい 
 

Calculator.java
以下自分のメモ:
おもうに、
数字ボタンを押すと表示窓に表示される
たすひくを押すとそれも表示しちゃえ
イコールボタンをおしたら演算して
その結果を窓に反映
ACを押したら消す
かな?
 
まずマウスのみを想定し、キーボード入力は想定しない
もしくは
キーボードのみを想定する
 
カシオの電卓風にしますか。だったら入力はマウスだな 
ボタンを配置するんだと思う
 

だとしたら文字で入力されたものをintにしないと計算できない
+とか-を入力されちゃったら変換できなくないか?
 
足す引くかけるはボタンにするしかない?

できた。稚拙でも時間内に動くのができればいい。
 
--->Calculator_from_EXE3105.java
 
package application;
import javafx. application.Application;
import javafx.event.ActionEvent;
import javafx. scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx. stage.Stage;
public class Calculator_from_EXE3105 extends Application {
 int foo=0;//何の記号がおされたか格納する
 int hogenum;//数字を格納
 public static void main(String[] args) {
   launch(args);
 }
 @Override
 public void start(Stage myStage) {
  Label l1;
  l1 = new Label("");
  TextField tf1 = new TextField("入力できます");
  Button b1 = new Button("=");
  Button b2 = new Button("削除");
  Button b3 = new Button("+");//foo=1
  Button b4 = new Button("-");//foo=2
  Button b5 = new Button("*");//foo=3
  Button b6 = new Button("/");//foo=4
  //------------
  //paneさん
  //------------
  HBox pane3 = new HBox();
  pane3.getChildren().addAll(b3,b4,b5,b6);
  VBox pane2 = new VBox();
  pane2.getChildren().addAll(tf1,b1,b2);
  BorderPane pane = new BorderPane();
  pane.setStyle("-fx-background-color:cyan;");
  pane.setTop(pane2);
  pane.setCenter(pane3);
  pane.setBottom(l1);
  //------------
  //各種ボタンさん
  //------------
  //=ボタン
  b1.setOnAction((ActionEvent event)->{
   System.out.println("fooはいま"+foo);
   if(foo == 1) {//足し算がおされたあとの入力
    //System.out.println(tf1.getText());
    String hoge = tf1.getText();//入力内容をhogeに格納
    hogenum = hogenum + Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    //foo=0;
    System.out.println("fooはいま"+foo);
    tf1.setText("計算結果は"+hogenum);
   }else if(foo == 2) {//ひき算がおされたあとの入力
    String hoge = tf1.getText();//入力内容をhogeに格納
    hogenum = hogenum - Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    //foo=0;
    System.out.println("fooはいま"+foo);
    tf1.setText("計算結果は"+hogenum);
   }else if(foo == 3) {//かけ算がおされたあとの入力
    String hoge = tf1.getText();//入力内容をhogeに格納
    hogenum *= Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    //foo=0;
    System.out.println("fooはいま"+foo);
    tf1.setText("計算結果は"+hogenum);
   }else if(foo == 4) {//わり算がおされたあとの入力
    String hoge = tf1.getText();//入力内容をhogeに格納
    hogenum = hogenum / Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    //foo=0;
    System.out.println("fooはいま"+foo);
    tf1.setText("計算結果は"+hogenum);
   }
  });
  //+ボタン
  b3.setOnAction((ActionEvent event)->{
   System.out.println("here in + button");
   if(foo==0) {//なにも押されてないときのにゅうりょk
    String hoge = tf1.getText();
    hogenum = hogenum + Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    foo=1;
    System.out.println("fooはいま"+foo);
    tf1.setText("");
   }else{//たし算ボタンがおされたあとの入力
    String hoge = tf1.getText();
    if (foo==1) {
     hogenum += Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=1;
     System.out.println("fooはいま"+foo);
    }else if(foo==2) {
     hogenum -= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=1;
     System.out.println("fooはいま"+foo);
    }else if(foo==3) {
     hogenum *= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=1;
     System.out.println("fooはいま"+foo);
    }else if(foo==4) {
     hogenum /= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=1;
     System.out.println("fooはいま"+foo);
    }
    tf1.setText("");
   }
  });
  //-ボタン
  b4.setOnAction((ActionEvent event)->{
   if(foo==0) {//なにも押されてないときのにゅうりょk
    String hoge = tf1.getText();
    hogenum = hogenum + Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    foo=2;
    System.out.println("fooはいま"+foo);
    tf1.setText("");
   }else{//ひき算ボタンがおされたあとの入力
    String hoge = tf1.getText();
    if (foo==1) {
     hogenum += Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=2;
     System.out.println("fooはいま"+foo);
    }else if(foo==2) {
     hogenum -= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=2;
     System.out.println("fooはいま"+foo);
    }else if(foo==3) {
     hogenum *= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=2;
     System.out.println("fooはいま"+foo);
    }else if(foo==4) {
     hogenum /= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=2;
     System.out.println("fooはいま"+foo);
    }
    tf1.setText("");
   }
  });
  //*ボタン
  b5.setOnAction((ActionEvent event)->{
   if(foo==0) {//なにも押されてないときのにゅうりょk
    String hoge = tf1.getText();
    hogenum = hogenum + Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    foo=3;
    System.out.println("fooはいま"+foo);
    tf1.setText("");
   }else{//かけ算ボタンがおされたあとの入力
    String hoge = tf1.getText();
    if (foo==1) {
     hogenum += Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=3;
     System.out.println("fooはいま"+foo);
    }else if(foo==2) {
     hogenum -= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=3;
     System.out.println("fooはいま"+foo);
    }else if(foo==3) {
     hogenum *= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=3;
     System.out.println("fooはいま"+foo);
    }else if(foo==4) {
     hogenum /= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=3;
     System.out.println("fooはいま"+foo);
    }
    tf1.setText("");
   }
  });
  //わるボタン
  b6.setOnAction((ActionEvent event)->{
   if(foo==0) {//なにも押されてないときのにゅうりょk
    String hoge = tf1.getText();
    hogenum = hogenum + Integer.parseInt(hoge);
    System.out.println("hogenumはいま"+hogenum);
    foo=4;
    System.out.println("fooはいま"+foo);
    tf1.setText("");
   }else{//わる算ボタンがおされたあとの入力
    String hoge = tf1.getText();
    if (foo==1) {
     hogenum += Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=4;
     System.out.println("fooはいま"+foo);
    }else if(foo==2) {
     hogenum -= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=4;
     System.out.println("fooはいま"+foo);
    }else if(foo==3) {
     hogenum *= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=4;
     System.out.println("fooはいま"+foo);
    }else if(foo==4) {
     hogenum /= Integer.parseInt(hoge);
     System.out.println("hogenumはいま"+hogenum);
     foo=4;
     System.out.println("fooはいま"+foo);
    }
    tf1.setText("");
   }
  });
  //削除ボタン
  b2.setOnAction((ActionEvent event)->{
   tf1.setText("");
   l1.setText("");
   hogenum=0;
   foo=0;
  });
  Scene scene = new Scene(pane,350,350);//シーンのサイズ
  myStage.setTitle("電子計算機");
  myStage.setScene(scene);
  myStage.show();
 }
}
 
(追記)
重複部分がかなりあるので関数に切り出せると思う。
デバッグ用のコメントはもすこし抜いていい。
デザインまではまわりきらなかった。これは仕方ない。
 
Y浦さんの話がヒントになってラストの1hで方向が見えた。
配列を考えていたが配列にする必要はなかった。
ただなぜ配列でうまく代入できなかったのか謎だ。event内だったからか?
代入すらできなかった。配列も復習の必要がある。
 
基本的に、「数字」→たすひくなどの「記号」→「数字」→イコールかさらにたすひくなどの「記号」と入力されていくので、
演算は「2つめの数字入力が確定してから押された2つめの記号ボタン」が押されたタイミングで行うことになる。
つまり「一つ前に押された記号の内容」で計算するので、それを格納しておく変数と、
現在の計算結果もしくは(ひとつめの)入力結果を格納するint型変数の2つがあればよろしい。
いま気づいたがintにしちゃったから小数点の計算できないな。ここはdoubleが正解か。


 
 
PR

コメント

ブログ内検索

P R