Report#7

課題


・Report#7:講義資料GUIプログラムをもとに、以下の課題を行え。
  1. 偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。
  2. 例外処理について、考察せよ。
  3. 上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを作成せよ。
  4. 摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。
  5. 「電卓」プログラム。中身は自分の思うように。

解答・考察

1.偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。

偶数奇数判定プログラム (GUIaa.java)

import java.awt.*;
import java.awt.event.*;

public class GUIaa extends Frame {
    Button    b0 = new Button("Even/Odd?");
    Label     x0 = new Label("Type a number and press...");
    TextField t0 = new TextField();
    
    public GUIaa() {
        setLayout(null);
        add(t0); t0.setBounds(10, 40, 90, 30);
        add(b0); b0.setBounds(110, 40, 80, 30);
        add(x0); x0.setBounds(10, 80, 180, 30);
        b0.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                int i = (new Integer(t0.getText())).intValue();
                t0.setText("");
                if(i % 2 == 0) {
                    x0.setText(i + " is Even");
                } else {
                    x0.setText(i + " is Odd");
                }
            }
        });
    }
    public static void main(String[] args) {
        Frame win = new GUIaa();
        win.setSize(200, 150); win.setVisible(true);
        win.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
    }
}   
    

実行結果


GUIaa

2.例外処理について、考察せよ。

3.上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを作成せよ。

オリジナルプログラム(BMI.java)

import java.awt.*;
import java.awt.event.*;

class BMIClass extends Frame{
    Button bt = new Button("結果を表示");
    Label l1 = new Label("身長(cm)");
	Label l2 = new Label("体重(kg)");
    Label l3 = new Label("判定");
    TextField t1 = new TextField();
    TextField t2 = new TextField();
    TextField t3 = new TextField();

     public BMIClass(){   
         setLayout(null);
           add(l1); l1.setBounds(20, 50, 60, 30);
           add(l2); l2.setBounds(20, 100, 60, 30);
           add(l3); l3.setBounds(20, 150, 60, 30);
           add(t1); t1.setBounds(80, 50, 60, 30);
           add(t2); t2.setBounds(80, 100, 60, 30);
           add(t3); t3.setBounds(80, 150, 60, 30);
           add(bt);bt.setBounds(60,200,100,40);

           bt.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent evt){
                    try{
                        double height =  (new Double(t1.getText())).doubleValue();
                        double weight = (new Double(t2.getText())).doubleValue();
                        t1.setText("");
                        t2.setText("");
                        double bmi = weight/((height*0.1)*(height*0.1));
                        if(bmi>=27){
                            t3.setText("肥満");
                        }else if((bmi>=23)&&(bmi<27)){
                            t3.setText("やや肥満");
                        }else if((bmi>=21)&&(bmi<23)){
                            t3.setText("普通");
                        }else if((bmi>=18)&&(bmi<21)){
                            t3.setText("やや痩せ");
                        }else if(bmi<18){
                            t3.setText("痩せ");
                        }
                    }catch(Exception ex){
                        t3.setText("整数を入れて下さい"); 
                    }
               }
           });
       }
 }
public class BMI{
    public static void main(String[] args) {
        BMIClass win = new BMIClass();
        win.setTitle("BMI");
        win.setSize(200, 250);
        win.setVisible(true);
        win.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
    }
}
	  

実行結果


BMI
4.摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。

温度変換プログラム(henkan.java)

//(華氏温度) = 1.8 × (摂氏温度) + 32
import java.awt.*;
import java.awt.event.*;

class Ondohenkan extends Frame{
    Button sb = new Button("C→F");
    Button cb = new Button("F→C");
    TextField t1 = new TextField();
    TextField t2 = new TextField();
    Label l1 = new Label();
    Label l2 = new Label();
    
    public Ondohenkan(){
        setLayout(null);
    add(sb);  sb.setBounds(110,50,60,20);
    add(cb);  cb.setBounds(110,80,60,20);
    add(t1); t1.setBounds(20,50,80,20);
    add(t2); t2.setBounds(20,80,80,20);
    add(l1); l1.setBounds(180,50,80,20);
    add(l2); l2.setBounds(180,80,80,20);

    sb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                try{
                    int i = (new Integer(t1.getText())).intValue();
                    t1.setText("" + (i-32)/1.8);
                    l1.setText("Succeed");
               }catch(Exception ex){
                    l1.setText("Not Integer");
                 }
            }
        });

    cb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                try {
                    int i = (new Integer(t2.getText())).intValue();
                    t2.setText("" + i*1.8+32);
                    l2.setText("Succeed");
                }catch(Exception ex) {
                    l2.setText("Not Integer"); 
                }
            }
        });
    }
}
public class Sample{
    public static void main(String args[]){
        Frame window = new Ondohenkan();
        window.setTitle("Centigrade⇔Fahrenheit");
        window.setSize(300, 150); 
        window.setVisible(true);
        window.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent evt){
                System.exit(0);
            }
        });
    }
}
	  

実行結果


OndoHenkan
5.「電卓」プログラム。中身は自分の思うように。

オリジナル電卓プロぐラム(CalMachine.java)

import java.awt.*;
import java.awt.event.*;

public class CalMachine extends Frame{
    Button b0 = new Button("0");
    Button b1 = new Button("1");
    Button b2 = new Button("2");
    Button b3 = new Button("3");
    Button b4 = new Button("4");
    Button b5 = new Button("5");
    Button b6 = new Button("6");
    Button b7 = new Button("7");
    Button b8 = new Button("8");
    Button b9 = new Button("9");
    Button bp = new Button("+");
    Button bm = new Button("-");
    Button be = new Button("=");
    Button bk = new Button("×");
    Button bw = new Button("÷");
    Button bc = new Button("C");
    Button bt = new Button(".");
    Label lb = new Label("Let's Calcutate!");
    TextField label =new TextField();

    double[] num = new double[]{0.0,0.0,};//数字の初期設定
    int count=0;//numを記憶(0,1)
    int cal=0;//足し算=1,引き算=2,かけ算=3,割り算=4
    double a=1.0;//位を判別するための場合分けに用いる

    public CalMachine(){
        setLayout(null);
        add(b0);    b0.setBounds(10,185,35,25);
        add(b1);    b1.setBounds(10,155,35,25);
        add(b2);    b2.setBounds(50,155,35,25);
        add(b3);    b3.setBounds(90,155,35,25);
        add(b4);    b4.setBounds(10,125,35,25);
        add(b5);    b5.setBounds(50,125,35,25);
        add(b6);    b6.setBounds(90,125,35,25);
        add(b7);    b7.setBounds(10,95,35,25);
        add(b8);    b8.setBounds(50,95,35,25);
        add(b9);    b9.setBounds(90,95,35,25);
        add(bc);    bc.setBounds(130,65,35,25);
        add(bw);   bw.setBounds(130,185,35,25);
        add(bk);    bk.setBounds(130,155,35,25);
        add(bm);   bm.setBounds(130,95,35,25);
        add(bp);    bp.setBounds(130,125,35,25);
        add(be);    be.setBounds(90,185,35,25);
        add(bt);    bt.setBounds(50,185,35,25);
        add(lb);    label.setBounds(10,30,155,25);
        add(label);   lb.setBounds(10,65,185,25);

        try{
            b0.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                    if(a<1){
                        num[count]=num[count];
                        a=a*0.1;
                    }else{
                        num[count]=num[count]*10;
                    }
                    label.setText(num[count] + "");
                }
            });
            b1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                    if(a<1){
                        num[count]=num[count]+a;
                        a=a*0.1;
                    }else{
                        num[count]=num[count]*10+1;
                    }
                    label.setText(num[count] + "");
                }
            });
            b2.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                    if(a<1){
                        num[count]=num[count]+a*2.0;
                        a=a*0.1;
                    }else{
                        num[count]=num[count]*10+2.0;
                    }
                    label.setText(num[count] + "");
                }
            });
            b3.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                    if(a<1){
                        num[count]=num[count]+a*3.0;
                        a=a*0.1;
                    }else{
                        num[count]=num[count]*10+3.0;
                    }
                    label.setText(num[count] + "");
                }
            });
            b4.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                    if(a<1){
                        num[count]=num[count]+a*4.0;
                        a=a*0.1;
                        }else{
                            num[count]=num[count]*10+4.0;
                        }
                        label.setText(num[count] + "");
                }
           });
           b5.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent evt){
                   if(a<1){
                       num[count]=num[count]+a*5.0;
                       a=a*0.1;
                   }else{
                       num[count]=num[count]*10+5.0;
                   }
                   label.setText(num[count] + "");
                }
           });
           b6.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent evt){
                   if(a<1){
                       num[count]=num[count]+a*6.0;
                       a=a*0.1;
                   }else{
                       num[count]=num[count]*10+6.0;
                   }
                   label.setText(num[count] + "");
                }
           });
           b7.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                   if(a<1){
                       num[count]=num[count]+a*7.0;
                       a=a*0.1;
                   }else{
                       num[count]=num[count]*10+7.0;
                   }
                   label.setText(num[count] + "");
                }
           });
           b8.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent evt){
                   if(a<1){
                       num[count]=num[count]+a*8.0;
                       a=a*0.1;
                   }else{
                       num[count]=num[count]*10+8.0;
                   }
                   label.setText(num[count] + "");
               }
           });
           b9.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent evt){
                   if(a<1){
                       num[count]=num[count]+a*9.0;
                       a=a*0.1;
                   }else{
                       num[count]=num[count]*10+9.0;
                   }
                   label.setText(num[count] + "");
               }
          });
          bc.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  num[0]=0;
                  num[1]=0;
                  cal=0;
                  count=0;
                  a=1.0;
                  label.setText(num[count] + "");
              }
          });
          bp.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  if(cal==1){num[0]=num[0]+num[1];}
                  if(cal==2){num[0]=num[0]-num[1];}
                  if(cal==3){num[0]=num[0]*num[1];}
                  if(cal==4){num[0]=num[0]/num[1];}
                  label.setText(num[0] + "");
                  cal=1;
                  count=1;
                  num[1]=0.0;
                  a=1.0;
              }
          });
          bm.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  if(cal==1){num[0]=num[0]+num[1];}
                  if(cal==2){num[0]=num[0]-num[1];}
                  if(cal==3){num[0]=num[0]*num[1];}
                  if(cal==4){num[0]=num[0]/num[1];}
                  label.setText(num[0] + "");
                  cal=2;
                  count=1;
                  num[1]=0.0;
                  a=1.0;
              }
          });
          bk.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  if(cal==1){num[0]=num[0]+num[1];}
                  if(cal==2){num[0]=num[0]-num[1];}
                  if(cal==3){num[0]=num[0]*num[1];}
                  if(cal==4){num[0]=num[0]/num[1];}
                  label.setText(num[0] + "");
                  cal=3;
                  count=1;
                  num[1]=0.0;
                  a=1.0;
              }
          });
          bw.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  if(cal==1){num[0]=num[0]+num[1];}
                  if(cal==2){num[0]=num[0]-num[1];}
                  if(cal==3){num[0]=num[0]*num[1];}
                  if(cal==4){num[0]=num[0]/num[1];}
                  label.setText(num[0] + "");
                  cal=4;
                  count=1;
                  num[1]=0.0;
                  a=1.0;
              }
          });
          be.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  if(cal==1){num[0]=num[0]+num[1];}
                  if(cal==2){num[0]=num[0]-num[1];}
                  if(cal==3){num[0]=num[0]*num[1];}
                  if(cal==4){num[0]=num[0]/num[1];}
                  label.setText(num[0] + "");
                  cal=0;
                  count=0;
                  num[1]=0.0;
                  num[0]=0.0;
                  a=1.0;
              }
          });
          bt.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  a=0.1;
              }
          });
          }catch(Exception evt){
            label.setText(evt.toString());
          }
    }

    public static void main(String[] args) {
        Frame win = new CalMachine();
        win.setSize(200, 250); 
        win.setVisible(true);
        win.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
    }
}
	  

実行結果


CalMachine



感想・反省


今回の課題は本当にきつかった。内部クラスやインターフェースなどの意味を理解するだけでも大変だった。変数に演算を割り振るところはもっとスマートにできそうな気がした。コンストラクタで初期設定してみようとしたらエラーが出てしまった。別の方法を考えようと思う。
また,"部品をすべて使ったプログラム"とあるのに3種類しか使ってない事に後で気づいてしまった。ごめんなさい


ウィザード (wizard)
魔法使い。専門知識にかけては誰にも負けない、その道のエキスパート。 この分野は誰、という風に分担が決まっていて、欠員が出ると満月の晩に 世界中のウィザードが集まり後任者を決めるのだという。

参考資料・参考サイト



課題のページへ