課題:
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
感想
手を付けるのがとても遅れてしまいました。
電卓がちゃんと動いたときは感動ものでした。