android stadioのインストール:
android stadio用のフォルダをデスクトップに作る。
名前に日本語を入れないようにね
ユーザー名も日本語にしてはいけないらしいよ
エンプティアクティビティというのを選んで次
保存場所はデスクトップの自分のふぉるだ
言語 ことりん→javaに変更
AVDマネージャアイコンを
クリック→
+create バーチャルデバイスを押す
pixel2のままnext→
一番上のDownloadを選ぶ→
Accept
両方許可のAcceptでnext→
(めっさ時間をかけてDL)
今日の午後は演習。
今日の終わりまでに提出。
電子計算機を作る
・動くのが一番大事
・めっちゃしょぼいもので動くものをつくってから、肉付けをしていくのがよい
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();
}
}
(追記)
おもうに重複部分がかなりあるので関数に切り出せると思う。
デバッグ用のコメントはもすこし抜いていい。
デザインまではまわりきらなかった。これはしゃあない
やまうらさんの話がヒントになって突然ラストの1hで方向が見えた。
配列を考えていたが配列にする必要はなかったんだ。
ただなぜ配列でうまく代入できなかったのか謎だ。event内だったから??
代入すらできなかったからな。配列も復習の必要がある。
基本的に、「数字」→たすひくなどの「記号」→「数字」→イコールかさらにたすひくなどの「記号」と入力されていくので、
演算は「2つめの数字入力が確定してから押された2つめの記号ボタン」が押されたタイミングで行うことになる。
つまり「一つ前に押された記号の内容」で計算するので、それを格納しておく変数と、
現在の計算結果もしくは(ひとつめの)入力結果を格納するint型変数の2つがあればよろしい。
いま気づいたがintにしちゃったから小数点の計算できないな。ここはdoubleが正解かも。