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


  名    前  仲松義嗣
  学籍番号 035735k
  所    属  工学部情報工学科
  提出期限 2004/1/5

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

01:import java.awt.*; 02:import java.awt.event.*; 03: 04:public class GUIaa extends Frame { 05: Button b = new Button("Even/Odd?"); 06: Label x = new Label("Type a number and press..."); 07: TextField t = new TextField(); 08: 09: public GUIaa() { 10: setLayout(null); 11: add(t); t.setBounds(10, 40, 90, 30); 12: add(b); b.setBounds(110, 40, 100, 30); 13: add(l); l.setBounds(10, 80, 180, 30); 14: b.addActionListener(new ActionListener() { 15: public void actionPerformed(ActionEvent evt) { 16: int i = (new Integer(t.getText())).intValue(); 17: t.setText(""); 18: if(i % 2 == 0) { 19: l.setText(i + " is Even"); 20: } else { 21: l.setText(i + " is Odd"); 22: } 23: } 24: }); 25: } 26: 27: public static void main(String[] args) { 28: Frame win = new GUIaa(); 29: win.setSize(200, 150); 30: win.setVisible(true); 31: win.addWindowListener(new WindowAdapter() { 32: public void windowClosing(WindowEvent evt) { 33: System.exit(0); 34: } 35: }); 36: } 37:}

** 解説 ** 01~02:パッケージのインポート 04:Frameクラスを継承するGUIaaクラスの宣言 05:java.awtパッケージ内にあるButton型のインスタンスを作成 06:java.awtパッケージ内にあるLabel型のインスタンスを作成 07:java.awtパッケージ内にあるTexeField型のインスタンスを作成 09:コンストラクタの作成 10:setLayoutの自動制御をoffに設定 11:TextField型のインスタンスtを(10,40)を始点とする横90高さ30の範囲に追加 12:Button型のインスタンスbを(110,40)を始点とする横100高さ30の範囲に追加 13:Label型のインスタンスlを(10,80)を始点とする横180高さ30の範囲に追加 14:アクションイベントを受け取るリスナーをボタンに追加 15:ボタンがクリックされたときの処理を記述するメソッドの宣言 16:テキストフィールドに書かれた文字列を引数に持つInteger型のインス タンスを作成し、文字列をint型に変換し変数iに代入 17:テキストフィールドを空白にします 18:iが偶数なら 19:ラベルに (iの値) is Even と表示 20:偶数以外すなはち奇数なら 21:ラベルに (iの値) is Odd と表示 27:mainメソッドを宣言 28:Frame型の変数winにFrameクラスを継承したGUIaaクラスのインスタンスを代入 29:フレームのサイズを横200高さ150に設定 30:コンポーネントの表示をonに設定 31:ウィンドウイベントを受け取るリスナーをフレームに追加 32~33:ウィンドウをクローズする処理を記述

2.例外処理

** 例外処理の考察 **
例外処理はJava言語の中で以下のようなクラス階層で実現されています。

java.lang.Object
 |-java.lang.Throwable
         |-java.lang.Error    
         |-java.lang.Exception
               |-java.lang.RuntimeException
               |-java.lang.ArrayIndexOutOfBoundsException
               |-java.lang.FileNotFoundException
               |-java.lang.InterruptedException
               ...

 Throwableクラスが2つのクラスに分類されています。
Errorクラスは、もはや動作を継続するのは期待できないときに投げられるク
ラスです。メモリがなくなったときなどにこのクラスが投げられます。
Exceptionクラスは、正しく例外処理を行って、動作が継続することを期待す
るときになげられるクラスです。配列の範囲を超えてアクセスしようとした
場合にこのクラスが投げられます。
 Exceptionクラスは、さらにRuntimeExceptionクラスとそれ以外に分けらています。
RuntimeExceptionクラスは実行中に起こり、コンパイラによって前もって
チェックされない例外を表すクラスです。
それ以外の例外クラスは、コンパイラによって前もってチェックされる例外
を表すクラスです。

例えば、例外処理をプログラムするときは次のようにプログラムします。

try{
    例外が発生しそうな処理
} catch(例外クラス e){
    例外が発生したときの処理
}

** ExampleProgram **
output.txt は read の実行権しか与えられていないとします。
-r--r--r--  1 j03035  staff    0 Feb  7 03:02 output.txt

01:import java.io.*; 02: 03:class FileNotFoundException{ 04: public static void main(String args[]){ 05: try{ 06: System.out.println("ExceptionExample"); 07: FileWriter fw = new FileWriter("output.txt"); 08: fw.write("Exception"); 09: fw.close(); 10: System.out.println("End"); 11: } catch(Exception e) { 12: System.out.println("Error"); 13: System.out.println(e); 14: } 15: } 16:}

** 実行結果 ** j03035% java FileNotFoundException ExceptionExample Error java.io.FileNotFoundException: output.txt (Permission denied) ** 解説 **  実行結果より、例外が発生する直前(07行)まではプログラムは正常じ動いて いることが分かります。  08行で例外が発生すると、11行の catch(Exception e) でキャッチして、 12~13の処理が実行されています。

3.MySampleProgram

01:import java.applet.Applet; 02:import java.awt.*; 03: 04:public class Sample extends Applet { 05: Button button = new Button("Button"); 06: Label label = new Label("Sample Components"); 07: TextField textfield = new TextField("TextField"); 08: Checkbox checkbox0 = new Checkbox("Win"); 09: Checkbox checkbox1 = new Checkbox("Mac"); 10: List list = new List(); 11: TextArea textarea = new TextArea("TextArea"); 12: Choice choice = new Choice(); 13: 14: public void init() { 15: setLayout(null); 16: add(label); label.setBounds(10 ,10 ,300,30 ); 17: add(textfield); textfield.setBounds(10 ,50 ,300,30 ); 18: add(list); list.setBounds(10 ,110,150,100); 19: add(checkbox0); checkbox0.setBounds(170,110,60 ,30 ); 20: add(checkbox1); checkbox1.setBounds(240,110,60 ,30 ); 21: add(choice); choice.setBounds(170,180,150,30 ); 22: add(button); button.setBounds(10 ,220,300,30 ); 23: add(textarea); textarea.setBounds(10 ,260,300,50 ); 24: 25: list.add("Applet"); 26: list.add("BorderLayout"); 27: list.add("Canvas"); 28: list.add("Graphics"); 29: list.add("GridLayout"); 30: list.add("Label"); 31: list.add("Panel"); 32: list.add("TextArea"); 33: list.add("TextField"); 34: list.add("ActionEvent"); 35: list.add("ActionListener"); 36: list.add("Exception"); 37: list.add("Integer"); 38: list.add("Thread"); 39: 40: choice.add("C"); 41: choice.add("COBOL"); 42: choice.add("Java"); 43: } 44:}

** 解説 ** ** 実行結果 ** result

4.温度換算プログラム

01:import java.applet.Applet; 02:import java.awt.*; 03:import java.awt.event.*; 04: 05:public class Convert extends Applet { 06: Button button0 = new Button("Centigrade"); 07: Button button1 = new Button("Fahrenheit"); 08: Label label0 = new Label("Type Fahrengeit Numbers"); 09: Label label1 = new Label("Type Centigrade Numbers"); 10: TextField textfield = new TextField(); 11: 12: public void init() { 13: setLayout(null); 14: add(textfield); textfield.setBounds(10 ,10 ,300,30 ); 15: add(button0); button0.setBounds(170,50 ,130,30 ); 16: add(button1); button1.setBounds(170,90 ,130,30 ); 17: add(label0); label0.setBounds(30 ,50 ,150,30 ); 18: add(label1); label1.setBounds(30 ,90 ,150,30 ); 19: 20: MyListener0 listener0 = new MyListener0(); 21: button0.addActionListener(listener0); 22: 23: MyListener1 listener1 = new MyListener1(); 24: button1.addActionListener(listener1); 25: } 26: 27: public class MyListener0 implements ActionListener{ 28: public void actionPerformed(ActionEvent evt) { 29: double d1 = (new Integer(textfield.getText())).doubleValue(); 30: d1 = (d1 - 32) * 0.55; 31: label0.setText("Centigrade is " + d1); 32: } 33: } 34: 35: public class MyListener1 implements ActionListener{ 36: public void actionPerformed(ActionEvent evt) { 37: double d2 = (new Integer(textfield.getText())).doubleValue(); 38: d2 = d2 * 1.8 + 32; 39: label1.setText("Fahrenheit is " + d2); 40: } 41: } 42:}

** 解説 ** ** 実行結果 ** result

5.電卓プログラム

001:import java.applet.Applet; 002:import java.awt.*; 003:import java.awt.event.*; 004: 005:public class Test extends Applet{ 006: Cal cal = new Cal(); 007: 008: TextField text = new TextField("0"); 009: Button[] b = new Button[16]; 010: Panel p = new Panel(); 011: 012: int calseq = 0; 013: int inval; 014: char opeCode; 015: 016: public void init(){ 017: for(int i = 0; i < 10; i++){ 018: b[i] = new Button(Integer.toString(i)); 019: } 020: b[10] = new Button("c"); 021: b[11] = new Button("+"); 022: b[12] = new Button("-"); 023: b[13] = new Button("*"); 024: b[14] = new Button("="); 025: b[15] = new Button("/"); 026: 027: p.setLayout(new GridLayout(5,3)); 028: for(int i = 0; i < 16; i++){ 029: p.add(b[i]); 030: } 031: 032: MyAdapter adapter = new MyAdapter(); 033: for(int i = 0; i < 16; i++){ 034: b[i].addMouseListener(adapter); 035: } 036: 037: setLayout(null); 038: add(text); 039: text.setBounds(200,0,210,30); 040: add(p); 041: p.setBounds(200,30,210,150); 042: 043: } 044: 045: class MyAdapter extends MouseAdapter{ 046: public void mouseClicked(MouseEvent e){ 047: Object source = e.getSource(); 048: Button btn = (Button)source; 049: String in = text.getText(); 050: String slabel = btn.getLabel(); 051: 052: inval = Integer.parseInt(in); 053: char clabel = slabel.charAt(0); 054: 055: switch(clabel){ 056: case '+': 057: case '-': 058: case '*': 059: case '/': 060: opeCode = clabel; 061: cal.total = inval; 062: calseq = 1; 063: break; 064: case '=': 065: if(calseq == 2){ 066: cal.calope(opeCode,inval); 067: inval = cal.total; 068: text.setText(String.valueOf(inval)); 069: calseq = 0; 070: } 071: break; 072: case 'c': 073: text.setText(String.valueOf(0)); 074: break; 075: default: 076: if(calseq == 1){ 077: inval = 0; 078: calseq = 2; 079: } 080: int ilabel = Integer.parseInt(slabel); 081: inval = inval * 10 + ilabel; 082: text.setText(String.valueOf(inval)); 083: break; 084: } 085: } 086: } 087:} 088: 089:class Cal{ 090: int total; 091: 092: void calope(char opeCode, int inval){ 093: switch(opeCode){ 094: case 'c': 095: total = 0; 096: break; 097: case '+': 098: total = total + inval; 099: break; 100: case '-': 101: total = total - inval; 102: break; 103: case '*': 104: total = total * inval; 105: break; 106: case '/': 107: if(inval != 0){ 108: total = total / inval; 109: } 110: break; 111: } 112: } 113:}

** 解説 ** ** 実行結果 ** result

感想

 手を付けるのがとても遅れてしまいました。 電卓がちゃんと動いたときは感動ものでした。