Report7


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

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

public class Repo7test04 extends Frame {
    Button     b0 = new Button("Even/Odd?);
    Lable      x0 = new Label("Type a number and press...");
    TextField  t0 = new TextField();

    public Repo7test04() {
        setLayout(null);
        add(t0);t0.setBounds(10,40,90,30);
	add(b0);b0.setBounds(110,40,180,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 Repo7test04();
	win.setSize(200,150); win,setVisible(true);
	win.addWindowListener(new WindowAdapter() {
	    public void windowClosing(WindowEvent ent) {
	        System.exit(0);
            }
        });
    }
}
   
結果



考察
import java.awt.*;でjava.awtパッケージをインポートしている。
import java.awt.event.*;でjava.awt.eventパッケージをインポートしている。
java.awtというのはAbstract Window Toolkitの略で、コンピュータ にグラフィカルインタフェースを描かせる。
java.awt.eventはawtからのイベントを処理する為にある。

public  class  Repo7test04  extends  FrameはFrameク ラスを継承したRepo7teset04クラスのことである。
Button  b0  =  new  Button("Even/Odd?)はButtonクラス のオブジェクトを作成している。()の中の文字はボタンに表示させる文字。
Label  x0  =  new  Label("Type  a  ~  press...")はLabelクラスのオブジェクトを作成している。()の中の文字は window内に表示させる文字。
TextField  t0  =  new  TextField()はTextFieldクラス のオブジェクトを作成している。

public  Repo7test04()はRepo7test04メソッド。
setLayout(null)は部品を自動的にレイアウトする機能を停止する。これにより、 ボタン等の部品を好きな位置に配置することができる。nullの他に、 FlowLayoutやBorderLayout等がある。
add(t0);  t0.setBounds(10,40,90,30)はテキストフィールドを貼付ける位 置を決めている。()の中の最初の二つの値は、ウインドウ内でのテキストフィー ルドの左上の座標を示している。残りの二つの値は座標からの幅と高さを表して いる。下の二つも同じ。
b0.addActionListener(new  Aciton  Listener()はボタンが押された ときの動作を決めている。
int  i  =  (new  Integer(t0.getText())).intValue()は テキストフィールドに入力された文字をint型変数iに代入している。
t0.setText("")は入力が終わったのでテキストフィールドを空白にする。
if(i  %  2  ==  0)  {からx0.setText(i  +  "  is&nbps; Odd");までは入力された値が偶数か奇数かを判断し ている。

Frame  win  =  new  Repo7test04()はRepo7test04クラスのオブ ジェクトをFrameクラス型オブジェクト変数winに作っている。
win.setSize(200,150)で表示するウインドウのサイズを決めている。
win.setVisible(true)でウインドウを表示している。()の中がfalseだとウイン ドウは表示されない。
win.addWindowListener(new  WindowAdapter()はウインドウからのイベン トを処理する動作を決めている。
public&nbps; void  windowClosing(WindowEvent  ent)はユーザーが ウインドウのクローズを要求するとwindowClosingメソッドが呼び出される。
System.exit(0)はこのプログラムを終了させる。

例外処理について考察せよ。
プログラム
public class Repo7test06 {

    public static void main(String[] args) {
        int a = 5;
        int b = 8;
        int c = 0;
        
        try{
        System.out.println("a/b=" + a/b);
        System.out.println("b/c=" + b/c);
	}
	catch(Exception err){
             System.out.println("エラーです");
        }
        finally{
            System.out.println("計算終了");
        }
    }
}

   
結果
a/b=0
エラーです
計算終了
    
考察
例外とはプログラムの実行中に発生した問題を通知するために、実行時に生成さ れるオブジェクトのこと。ユーザーはプログラマーが思いもしないような使い方 をする場合がある。そのようなプログラミングでは解決できない問題を、例外処理 を使い問題を回避する。

例外処理の基本は、例外オブジェクトをキャッチして処理すること。tryプ ロック内で作られた例外オブジェクトはcatchブロックでキャッチして処理する。
try{
    //ここに例外が発生しそうな処理を書く
   }
   catch(例外クラス1 変数){
    //例外処理1を書く
   }
   catch(例外クラス2 変数){
   //例外処理2を書く
   }
   finally{
   //共通処理を書く
   }
   
例外が発生しなかった場合は共通処理が実行される。
例外1が発生した場合は例外処理1が実行され、共通処理が実行される。
例外2が発生した場合は例外処理2が実行され、共通処理が実行される。
例外が発生した場合はtryブロックの処理は中断され、その例外を処理できる catchブロックを探して、例外を処理できるcatchブロックに例外処理が実行され る。

よく使われる例外クラス
例外クラス 内容
ArrayIndexOutOfBoundsException 定義済みの配列を超えたとき
ClassNotFoundException クラスが見つからないとき
FileNotFoundException ファイルが見つからないとき
IllegalArgumentException 引数が不正なとき
NumberFormatException 数値フォーマットが異なるとき
NullPointerException nullオブジェクトの不正な使用を示すとき

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

public class Repo7test07 extends Frame{
    Button    b0  = new Button("登録");
    TextField t0  = new TextField();
    TextArea  t1  = new TextArea();
    List      l0  = new List();
    Choice    ch  = new Choice();
    Checkbox  cb0 = new Checkbox("★★★");
    Checkbox  cb1 = new Checkbox("★★");
    Checkbox  cb2 = new Checkbox("★");
    Label     la0 = new Label("アーティスト名");
    Label     la1 = new Label("ジャンル");
    Label     la2 = new Label("ランク");
    Label     la3 = new Label("レビュー");
    Label     la4 = new Label("お気に入りアーティスト登録");

    public Repo7test07() {
        setLayout(null);
        add(la4); la4.setBounds(50,30,150,30);
        add(la0); la0.setBounds(10,70,50,30);
        add(t0);  t0.setBounds(120,70,150,30);
        add(la1); la1.setBounds(10,110,50,30);
        add(ch);  ch.setBounds(120,110,100,30);
        ch.add("クラシック"); ch.add("J-POP"); ch.add("ロック");
        ch.add("メタル"); ch.add("RB"); ch.add("Hip-Hop");
        add(la2); la2.setBounds(10,150,60,30);
        add(cb0); cb0.setBounds(120,150,60,30);
        add(cb1); cb1.setBounds(190,150,50,30);
        add(cb2); cb2.setBounds(240,150,40,30);
        add(l0);  l0.setBounds(120,190,50,50);
        l0.add("邦楽"); l0.add("洋楽");
        add(la3); la3.setBounds(10,260,100,20);
        add(t1);  t1.setBounds(120,260,250,150);
        add(b0);  b0.setBounds(300,420,60,30);

    }
public static void main(String[] args) {
    Frame win = new Repo7test07();
    win.setSize(400,450);
    win.setVisible(true);
    }
}
   
結果

考察
このプログラムにウインドウを閉じさせるプログラムを組み込んだら、エラー が出てしまったので、その部分を取り除いて画面に表示だけさせるプログラム になってしまった。
ボタンには「登録」書いてあるが実際には何もしていない。
今回使ったGUI部品
Button 機械等のボタンを真似たもの
このプログラムでは「登録」
TextField 一行のテキストを入力できる
このプログラムでは「アーティスト名」 の入力欄
TextArea 複数行のテキストを入力することができる
このプログラムでは「レ ビュー」の入力欄
List 一つ以上の項目を選択することを可能にするコンポーネント
このプ ログラムでは「邦楽」「洋楽」の二つを選べる
Choice あるタイプのメニューを提供するコンポーネント
Checkbox ラベルと小さいボックスを組み合わせたコンポーネント
このプログ ラムでは「ランク」の三つの項目を選べる
Label GUI上に文字列を表示させる
このプログラムでは「アーティスト名」 「ジャンル」等の文字列

摂氏から華氏、華氏から摂氏への温度換算ができるプログラ ムを作成せよ。
 プログラム
import java.awt.*;
import java.awt.event.*;

public class Ex1 extends Frame{
    Button     bu0 = new Button("摂氏→華氏");
    Button     bu1 = new Button("華氏→摂氏");
    TextField  te0 = new TextField();
    TextField  te1 = new TextField();
    Label      l0 = new Label("");
    Label      l1 = new Label(""); 
    public Ex1(){
        setLayout(null);
        add(te0); te0.setBounds(30,50,100,20);
        add(l0);  l0.setBounds(60,80,40,30);
        add(bu0); bu0.setBounds(140,80,100,30);
        add(bu1); bu1.setBounds(140,110,100,30);
        add(l1);  l1.setBounds(270,130,40,30);
        add(te1); te1.setBounds(240,150,100,20);
    
    
        bu0.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent evt) {
                try{
                    int i = (new Integer(te0.getText())).intValue();
                    double x = (i * 1.8 + 32);
                    te1.setText("" + x);
                    l0.setText("摂氏");
                    l1.setText("華氏");
                }catch(Exception ex) {
                    te1.setText("エラーです");
                    }
                }
           });
        bu1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                try{
                    int i = (new Integer(te0.getText())).intValue();
                    int x = (i - 32) * 5 / 9;
                    te1.setText("" + x);
                    l0.setText("華氏");
                    l1.setText("摂氏");
                }catch(Exception ex){
                    te1.setText("エラーです");
    
                    }
                }
            });
    }
    public static void main(String[] args) {
        Frame win = new Ex1();
        win.setSize(370,200); win.setVisible(true);
        win.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
    }
}
    
結果

考察
摂氏から華氏への計算方法は
華氏=摂氏*9/5+32
で求められる。
華氏から摂氏屁の計算方法は
摂氏=(華氏-32)*5/9で
で求められる
テキストフィールドに整数以外の文字が入力されるとエラーを出力する

電卓プログラム。中身は自分の思うように。
プログラム
import java.awt.*;
import java.awt.event.*;

public class Repo7test10 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     bk = new Button("*");
    Button     bw = new Button("/");
    Button     be = new Button("=");
    Button     bt = new Button(".");
    Button     bc = new Button("C");
    TextField  t0 = new TextField();

    double[] num = new double[]{0.0,0.0,};
    int count = 0;
    int cal = 0;
    double a = 1.0;

    public Repo7test10(){
        setLayout(null);
	add(b0);  b0.setBounds(10,260,40,30);
	add(b1);  b1.setBounds(10,225,40,30);
	add(b2);  b2.setBounds(60,225,40,30);
	add(b3);  b3.setBounds(110,225,40,30);
	add(b4);  b4.setBounds(10,190,40,30);
	add(b5);  b5.setBounds(60,190,40,30);
	add(b6);  b6.setBounds(110,190,40,30);
	add(b7);  b7.setBounds(10,155,40,30);
	add(b8);  b8.setBounds(60,155,40,30);
	add(b9);  b9.setBounds(110,155,40,30);
	add(bp);  bp.setBounds(160,260,40,30);
	add(bm);  bm.setBounds(160,225,40,30);
	add(bk);  bk.setBounds(160,190,40,30);
	add(bw);  bw.setBounds(160,155,40,30);
	add(be);  be.setBounds(110,260,40,30);
	add(bt);  bt.setBounds(60,260,40,30);
	add(bc);  bc.setBounds(160,120,40,30);
	add(t0);  t0.setBounds(10,30,170,20);

        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;
                    }
		    t0.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;
		    }
		    t0.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;
                    }
		    t0.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;
		    }
		    t0.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;
		    }
		    t0.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;
		    }
		    t0.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;
	            }
		    t0.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;
		    }
		    t0.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;
                    }
		    t0.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;
                    }
		    t0.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;
		    t0.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];}
		    t0.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];}
		    t0.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];}
		    t0.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];}
		t0.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];}
		t0.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){
        t0.setText(evt.toString());
    }
}
public static void main(String[] args) {
    Frame win= new Repo7test10();
    win.setSize(200,300); win.setVisible(true);
    win.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent evt){
	    System.exit(0);
        }
    });
  }
}
    
結果

考察
レイアウトは家にあった電卓を参考にして作成。
関数電卓のように色々機能をつけたかったが、ややこしくなるのと時間がない ので断念。

感想・反省
今回のプログラムはGUIで、アプリケーションのレイアウトが自分の好きなよ うに変えられるのでプログラムの書いている最中は楽しかった。
  まだ、勉強が足りないのが実感できた課題だった。
今回も期限ギリギリだった。

参考
独学Java第二版
ジョセフ・オニール著
浅煎り珈琲Javaアプリケーション入門
華氏と摂氏
http://chisiki.sub.jp/MorinoKigi/UnitnoKi/SesshiKasshi.htm