Programming II Report#5

 ProgramingII Report#4 <- TOP -> ProgramingII Report#6


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

~ 目次 ~

  1. 「偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。」について
  2. 1-1. 入力ソース
  3. 1-2. 実行結果
  4. 「例外処理について、考察せよ。」について
  5. 2-1. 入力ソース
  6. 2-2. 実行結果
  7. 「上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを作成せよ。」について
  8. 3-1. 入力ソース
  9. 3-2. 実行結果
  10. 「摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。」について
  11. 4-1. 入力ソース
  12. 4-2. 実行結果
  13. 「「電卓」プログラム。中身は自分の思うように。」について
  14. 5-1. 入力ソース
  15. 5-2. 実行結果
  16. 感想

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

1-1.入力ソース


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

public class GUIaa extends Frame {              // Frameクラスの継承
           // インスタンス変数としてボタン、表示欄、入力欄を生成・初期化
    Button    b0 = new Button("Even/Odd?");
    Label     x0 = new Label("Type a number and press...");
    TextField t0 = new TextField();
    
    public GUIaa() {
        setLayout(null);                        // 部品の自動配置機能をoffにする
        add(t0); t0.setBounds(10, 40, 90, 30);  // 入力欄の貼り付け(左上隅のx/y座標、幅、高さ)
        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);
            }
        });
    }
}

1-2. 実行結果



GUIとは
Graphical User Interfaceの頭文字を取って略したもの。文字が並んだだけの(Character User Interface : CUI)の逆。キーボード以外の操作も可能。これにより操作方が増す。

1~2行では、java.awtパッケージとjava.awt.eventパッケージをimportしている。import java.awt.*でjava.awt内のすべてのクラスは参照できるようになるがjava.awt中のパッケージ内のクラスまでは参照することはできない。そのため、さらにimport java.awt.event.*を記述している。

4行では、ウインドウを作成するためにFrameクラスを継承したサブクラスGUIaaを作っている。

6~8行では、Buttonクラス、Labelクラス、TextFieldクラスのインスタンスを作りそれぞれb0,x0,t0に代入している。これらはコンポーネントと呼ばれるGUIの部品である。

11行では、GUI部品の自動配置機能をオフにして手動で配置するようにしている。

12~14行では、コンテナと呼ばれるコンポーネントを配置できるコンポーネントにaddメソッドを使用してButton等のGUI部品を格納している。その後、setBoundsで実際に配置する座標と大きさを指定している。

17行でt0.getTextメソッドはt0に入力された文字列を値として返す。intValueメソッドはIntegerクラスのメソッドで、インスタンス作成時に引数として与えられた文字列(整数)をint型の数に変換して返す。つまりこの文はTextField t0に入力された整数の文字列をint型の数に変換してint iに代入するという意味である。

Frame型の変数winにGUIaaクラスのインスタンスを代入している。GUIaaクラスはFrameクラスを継承して作ったサブクラスなので代入が可能である。setSizeメソッドでウインドウの大きさを指定し、setVisible(true)でウインドウを見えるようにする。

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

2-1.入力ソース




2-2. 実行結果


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

3-1.入力ソース



3-2. 実行結果

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

4-1.入力ソース


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

public class CFchanger extends Frame{
    Button      b0 = new Button("摂氏に変換");
    Button      b1 = new Button("華氏に変換");
    static Label       x1 = new Label("何か数字を入れて下さい");
    Label       x0 = new Label("");
    TextField   t0 = new TextField();
    
    public CFchanger(){
        setLayout(null);
        add(x1); x1.setBounds(10,50,180,30);
        add(t0); t0.setBounds(10,80,90,30);
        add(x0); x0.setBounds(10,120,250,30);
        add(b0); b0.setBounds(100,85,100,30);
        add(b1); b1.setBounds(200,85,100,30);
        b0.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent evt){
                double temp = 0;
                try{
                    double i = new Double(t0.getText()).doubleValue();
                    temp = (i-32)/1.8;
                    if(-273.15 > temp){
                        throw new Nainai();
                    }
                    else{
                    x0.setText("摂氏にすると " + temp);
                    }
            }
            catch (Nainai nai) {
                x0.setText("絶対温度-273.15以下はありません");
            }
            catch (NumberFormatException e) {
                x0.setText("数字を入力して下さい");
            }
            catch (Exception e){
                x0.setText("エラーが発生しました。");
            }
        }
    });
        b1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent evt){
                double temp = 0;
                try{
                    double i = new Double(t0.getText()).doubleValue();
                    temp = 1.8*i+32;
                    if(temp < -459.67){
                        throw new Nainai();
                    }
                else{
                    x0.setText("華氏にすると " + temp);
                }
                
            }
            catch (Nainai nai) {
                x0.setText("絶対温度-459.67以下はありません");
            }
            catch (NumberFormatException e) {
                x0.setText("数字を入力して下さい。");
            }
            catch (Exception e){
                x0.setText("エラーが発生しました。");
            }
        }
    });
}
    
      class Nainai extends Exception {
        public Nainai() {
            super();
        }
    }
    
    public static void main(String[] args){
        Frame win = new CFchanger();
        win.setSize(300,250);
        win.setVisible(true);
        win.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent evt){
                System.exit(0);
            }
        });
    }
}
4-2. 実行結果


絶対零度以下の計算をさせると。


数字意外(文字等)を入力すると。

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

5-1.入力ソース


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

public class Keisanki extends Frame{
    Button      b0    = new Button("0");
    Button      b00   = new Button("00");
    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      bsum  = new Button("+");
    Button      bsub  = new Button("−");
    Button      bmul  = new Button("×");
    Button      bdiv  = new Button("÷");
    Button      bwa   = new Button("=");
    Button      bc    = new Button("C");
    Label       disp  = new Label("",Label.RIGHT);
    
    int num1 = 0;
    int num2 = 0;
    int hinban = 0;
    
    public Keisanki(){
        setLayout(null);
        add(b0);   b0.setBounds(60,110,40,30);
        add(b00);  b00.setBounds(100,110,40,30);
        add(b1);   b1.setBounds(60,50,40,30);
        add(b2);   b2.setBounds(100,50,40,30);
        add(b3);   b3.setBounds(140,50,40,30);
        add(b4);   b4.setBounds(60,70,40,30);
        add(b5);   b5.setBounds(100,70,40,30);
        add(b6);   b6.setBounds(140,70,40,30);
        add(b7);   b7.setBounds(60,90,40,30);
        add(b8);   b8.setBounds(100,90,40,30);
        add(b9);   b9.setBounds(140,90,40,30);
        add(bsum); bsum.setBounds(180,50,40,30);
        add(bsub); bsub.setBounds(180,70,40,30);
        add(bmul); bmul.setBounds(180,90,40,30);
        add(bdiv); bdiv.setBounds(180,110,40,30);
        add(bwa);  bwa.setBounds(140,110,40,30);
        add(bc);   bc.setBounds(20,110,40,30);
        add(disp); disp.setBounds(25,25,150,30);
        disp.setFont(new Font("null",Font.PLAIN,20));
        disp.setBackground(Color.white);
//       disp.setFont(white);
            b0.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10;
                    disp.setText(""+num1);
                }
            });
            b00.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*100;
                    disp.setText(""+num1);
                }
            });
            b1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+1;
                    disp.setText(""+num1);
                }
            });
            b2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+2;
                    disp.setText(""+num1);
                }
            });
            b3.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+3;
                    disp.setText(""+num1);
                }
            });
            b4.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+4;
                    disp.setText(""+num1);
                }
            });
            b5.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+5;
                    disp.setText(""+num1);
                }
            });
            b6.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+6;
                    disp.setText(""+num1);
                }
            });
            b7.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+7;
                    disp.setText(""+num1);
                }
            });
            b8.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+8;
                    disp.setText(""+num1);
                }
            });
            b9.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    num1 = num1*10+9;
                    disp.setText(""+num1);
                }
            });
            bsum.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if(hinban == 0){
                        num2 = num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 1;
                    }
                    else{
                        num2 = num2 + num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 1;
                }
            }
        });
            bsub.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if(hinban == 0){
                        num2 = num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 2;
                    }
                    else{
                    num2 = num2 - num1;
                    disp.setText(""+num2);
                    num1 = 0;
                    hinban = 2;
                }
            }
        });
            bmul.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if(hinban == 0){
                        num2 = num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 3;
                    }
                    else{
                        num2 = num2 * num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 3;
                    }
                }
            });
            bdiv.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if(hinban == 4 && num1 == 0){
                        disp.setText("E");
                    }
                    if(hinban == 0){
                        num2 = num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 4;
                    }
                    else{
                        num2 = num2 / num1;
                        disp.setText(""+num2);
                        num1 = 0;
                        hinban = 4;
                    }
                }
            });
            bwa.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if(hinban == 1) {num2 = num2 + num1;}
                    if(hinban == 2) {num2 = num2 - num1;}
                    if(hinban == 3) {num2 = num2 * num1;}
                    if(hinban == 4) {num2 = num2 / num1;}
                    if(hinban == 4 && num1 == 0){
                        disp.setText("E");
                    }
                    disp.setText(""+num2);
                    num1 = 0;
                }
            });
            bc.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                num1 = 0;
                num2 = 0;
                hinban = 0;
                disp.setText(""+num2);
                }
            });
     class Erro extends Exception {
        public Erro() {
            super();
        }
    }
}
 
public static void main(String[] args) {
        Frame win = new Keisanki();    // Windowの生成
        win.setSize(220,140);      // winの大きさを幅200,高さ150にする
        win.setVisible(true);       // winの表示
        win.setBackground(Color.black);
        
        // windowが閉じたらアプリケーションを終了させる。
        win.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
    }
}
5-2. 実行結果
足し算をしたとき(100 + 12)


引き算をしたとき(100 - 12)


掛け算をしたと(100 × 12)


割り算をしたとき(100 ÷ 12)


分子を0で割ったときの処理。

6. 感想