2008/12/10 OOP 同演習小テスト問題 問 1. 次のプログラムの出力結果を a~d の中から選べ public class Problem1 { public static void main(string[] args){ int i =2; int j =3; System.out.println( i + j ); a) 23 b) 5 c) ij d) i+j 問 2. 次のプログラムの出力結果を a~d の中から選べ public class Problem2 { public static void main(string[] args){ int a=4; if( a>=2 ){ System.out.print("A"); else if( a<=6 ){ System.out.print("B"); if(a==4){ System.out.print("C"); a) A b) B c) C d) AB e) ABC f) AC 問 3. 次のプログラムの出力結果を a~d の中から選べ public class Problem3 { public static void main(string[] args){ for(int i = 0; i < 3; i++){ System.out.print( i ); a) 012 b) 0123 c) 12 d) 123 e) 何も表示しない 1
2008/12/10 OOP 同演習小テスト問題 問 4. 次の実行結果となるようなプログラムを作成したい プログラムの空欄 1 に入る正しい答えを 解答群 (a) ~(d) の中から選びなさい 実行結果 プログラム import java.applet.applet; import java.awt.graphics; import java.awt.color; import java.awt.dimension; public class Square extends Applet { public void paint(graphics g){ g.setcolor(color.red); 空欄 1 解答群 (a)g.drawoval(20,20,100,100); (b)g.fillrect(20,20,100,100); (c)g.drawline(20,20,100,100); (d)g.drawarc(20,20,100,100,200,200); 2
問 5. プログラムの説明とプログラムを読んで 設問に答えよ 2008/12/10 OOP 同演習小テスト問題 プログラムの説明 マウスを押した時と離した時 ウインドウに文字を描画するプログラムを考える 処理は以下の通りである ウインドウ内でマウスを押した時 マウスを押しました と表示する ウインドウ内でマウスを離した時 マウスを離しました と表示する 実行結果 マウスを押した時 マウスを離した時 プログラム import java.applet.applet; import java.awt.graphics; import java.awt.event.mouseevent; import java.awt.event.mouselistener; /* <applet code=" Mouse.class" width=300 height=300></applet> */ public class Mouse extends Applet implements MouseListener{ String s = ""; public void init(){ addmouselistener(this); public void paint(graphics g){ 空欄 2 public void mousepressed(mouseevent m){ --------- 1 --------- public void mousereleased(mouseevent m){ --------- 2 --------- 3
public void mouseentered(mouseevent m){ public void mouseexited(mouseevent m){ public void mouseclicked(mouseevent m){ 2008/12/10 OOP 同演習小テスト問題 設問 1: プログラムの空欄 2 には文字を描画する処理が入る 空欄 2 に入る正しい答えを 解答群 (a)~(d) の中から選びなさい 解答群 (a)g.drawoval(s,20,20); (b)g.fillrect(s,20,20); (c)g.drawstring(s,20,20); (d)g.drawline(s,20,20); 設問 2: 上記の実行結果となるようなプログラムを作成したい 1 ~ 2 に入る文として正しい答えを解答群 (a) (b) の中から選びなさい 解答群 (a) s = " マウスを押しました "; repaint(); (b) s = " マウスを離しました "; repaint(); 4
2008/12/10 OOP 同演習小テスト問題 問 6. 次の実行結果となるようなプログラムを作成したい プログラムの 1 ~ 4 に入る正しい答えを 解答群 (a)~(d) の中から選びなさい 実行結果 プログラム import java.awt.frame; import java.awt.graphics; import java.awt.event.windowadapter; import java.awt.event.windowevent; public class Introduction extends Frame{ Introduction(){ --------- 1 --------- addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent we){ System.exit(0); ); public void paint(graphics g){ --------- 2 --------- public static void main(string[] args){ --------- 3 --------- --------- 4 --------- 解答群 (a) Introduction intro = new Introduction(); (b) (c) g.drawstring(" 名前 : 情報太郎 ",20,60); g.drawstring(" 生年月日 :1 月 1 日 ",20,80); g.drawstring(" 学籍番号 :s0000aa",20,100); settitle(" 自己紹介 "); setsize(200,200); (d) intro.setvisible(true); 5
2008/12/10 OOP 同演習小テスト問題 問 7. 下記の図 A になるようにプログラムを作成した (A)~(D) にあてはまるものを選択肢 (1)~(7) より選べ た だし fillpolygon については下記参考を参照せよ /* Triangles.java */ /* <applet code=triangles.class width=400 height=300> </applet> */ import java.applet.applet; import java.awt.*; public class Triangles extends Applet { public void paint(graphics g) { int x [] = {200, 150, 250; // 三角形の各頂点の X 座標値 int y [] = {20, 70, 70; // 三角形の各頂点の Y 座標値 g.setcolor(color.blue); // 色を青に設定 g.fillpolygon(x, y, 3); // 三角形を描画 for (int i = 0; i < 3; i++) { (A) (B) g.setcolor(color.green); // 色を緑に設定 g.fillpolygon(x, y, 3); // 三角形を描画 for (int i = 0; i < 3; i++) { (C) (D) g.setcolor(color.yellow); // 色を黄に設定 g.fillpolygon(x, y, 3); // 三角形を描画 選択肢 (1) x[i] += 50; // X 座標値を 50 ドット増やす (2) x[i] -= 50; // X 座標値を 50 ドット減らす (3) y[i] += 50; // Y 座標値を 50 ドット増やす (4) y[i] -= 50; // Y 座標値を 50 ドット減らす (5) x[i] += 100; // X 座標値を 100 ドット増やす (6) x[i] -= 100; // X 座標値を 100 ドット減らす (7) y[i] += 100; // Y 座標値を 100 ドット増やす (8) y[i] -= 100; // Y 座標値を 100 ドット減らす 6
(9) // X 座標はそのまま (10) // Y 座標はそのまま (11) //X- Y 座標そのまま 2008/12/10 OOP 同演習小テスト問題 図 A 7
2008/12/10 OOP 同演習小テスト問題問 8. 問 7 図 Aを下記図 B( ただし 各図形の 3 頂点は図 A と同じ座標である ) になるようにするには Triangles.java を何箇所訂正し どのように変更したらよいか述べよ ただし プログラム行数は変更しない 図 B 参考 fillpolygon public abstract void fillpolygon(int[] xpoints, int[] ypoints, int npoints) x 座標と y 座標の配列で定義される閉じた多角形を塗りつぶします このメソッドは npoint ラインセグメントによって定義される多角形を描きます 最後の点と最初の点が一致 しない場合 それらを接続するラインを描画すれば図は自動的に閉じます 多角形内の領域は 偶奇塗りつぶし規則 ( 交互規則ともいう ) を使って定義されます パラメータ : xpoints - x 座標の配列 ypoints - y 座標の配列 npoints - 点の総数 8
2008/12/10 OOP 同演習小テスト問題 問 9. 以下のプログラムは 1 つのファイルに書いたプログラムで 右の実行例のように図形を描画するアプリケーションである 空欄を埋めてプログラムを完成させよ 但し 演算子等の記号以外は 次の語群のものを用いること (1) this (2) x (3) y (4) p (5) points (6) extends (7) Figure (8) drawtriangle (9) g.drawline (10) drawrectangle (11) Points (12) (int)(math.random()*200) import java.awt.*; import java.awt.event.*; // 座標を代入するクラス class Points { int x,y; Points(int x, int y){ 1 2 // 図形描画用のテンプレート abstract class Figure{ Points[] p; // 座標を設定するメソッド void setpoints(points[] points){ 3 // 描画用に共通呼び出し名にするメソッド abstract void drawfigure(graphics g); // 三角形クラス class Triangle 4 { // コンストラクタ座標点 3 つで初期化する三角形クラス Triangle(Points[] points){ 3 // 図形描画のメソッドを実装三角形を 3 つ書く public void drawfigure(graphics g){ 5 (g, p[0]); 5 (g, p[1]); 5 (g, p[2]); private void drawtriangle(graphics g, Points p){ 6 (p.x, p.y-10, p.x+10, p.y+5); // p 点の真上から右下へ 6 (p.x+10, p.y+5, p.x-10, p.y+5);// p 点の右下から左下へ 6 (p.x-10, p.y+5, p.x, p.y-10); // p 点の左下から真上へ 9
2008/12/10 OOP 同演習小テスト問題 // 四角形クラス class Square 7 { // コンストラクタ座標点 4つで初期化する四角形クラス Square(Points[] points){ 8 // 図形描画のメソッドを実装四角形を4つ書く public void drawfigure(graphics g){ 9 (g, p[0]); 9 (g, p[1]); 9 (g, p[2]); 9 (g, p[3]); private void drawrectangle (Graphics g, Points p){ //p 点から出発 10 (p.x, p.y, p.x+10, p.y); // 10 (p.x+10, p.y, p.x+10, p.y+10); // 10 (p.x+10, p.y+10, p.x, p.y+10); // 10 (p.x, p.y+10, p.x, p.y); // // フレームを作成して描画するためのクラス class DrawFigures 11 { // 図形を 4 つ定義してみた例 Figure[] Figs = 12 [4]; // 座標点を 14 個用意する Points[] p = 13 [14]; // コンストラクタで初期化等の設定をする DrawFigures(){ // 描画用の座標点をランダムに生成した見た例 for(int i=0;i<p.length; i++){ p[i]= 14 // 座標点を 3 つ 4 つの塊として 準備する Points[] trip1 ={ p[0], p[1], p[2]; Points[] trip2 ={ p[3], p[4], p[5]; Points[] sqrp1 ={ p[6], p[7], p[8], p[9]; Points[] sqrp2 ={ p[10], p[11], p[12], p[13]; // 図形を生成する Figs[0] = new Triangle(trip1); Figs[1] = new Triangle(trip2); Figs[2] = new Square(sqrp1); Figs[3] = new Square(sqrp2); // フレームサイズを 300,300 に設定する setsize(300,300); // フレームのクローズボタンを定義する ( アプリケーション終了用 ) addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent we){ System.exit(0); ); // フレームを表示する 10
2008/12/10 OOP 同演習小テスト問題 setvisible(true); // フレームが表示されると自動的に呼ばれるメソッドをオーバーライド public void paint(graphics g){ for(int i=0; i<figs.length; i++){ Figs[i].drawfigure(g); // アプリケーションのメインクラス public class DrawFiguresTest { public static void main(string[] args){ // フレームをインスタンスとして 1 つだけ生成してみる DrawFigures drawfigures = new DrawFigures(); 11
問 10. プログラムの説明とプログラムを読んで 設問に答えよ 2008/12/10 OOP 同演習小テスト問題 プログラムの説明 背景を赤色にする ボタンを押下した時に JPanel の背景が赤色になる 背景を緑色にする ボタンを押下した時に JPanel の背景が緑色になる 背景を青色にする ボタンを押下した時に JPanel の背景が青色になる 実行例 プログラム import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingEvent extends JFrame implements ActionListener { private JPanel panel; private JButton redbutton; private JButton greenbutton; private JButton bluebutton; // コンストラクタ public 2 { // パネルの生成 panel = new 3 ; // レイアウトマネージャーの設定 panel.setlayout(new 4 ); // ボタンの生成 redbutton = new JButton(" 背景を赤色にする "); greenbutton = new JButton(" 背景を緑色にする "); bluebutton = new JButton(" 背景を青色にする "); 12
2008/12/10 OOP 同演習小テスト問題 // ボタンを追加 panel.add(redbutton); panel.add(greenbutton); panel.add(bluebutton); // コンテントペインを取得 Container contentpane = 5 ; // パネルを追加 contentpane.add(panel); // イベントリスナーの登録 1 this.setdefaultcloseoperation(jframe.exit_on_close); this.settitle("swingevent"); this.setsize(500,400); this.setvisible(true); public static void main(string[] args) { // フレームを作成 SwingEvent frame = new SwingEvent() ; public void actionperformed(actionevent e){ // イベントが指定されたボタンで発生した場合 if ( 6 == redbutton) { panel.setbackground(color.red); else if ( 6 == greenbutton) { panel.setbackground(color.green); else if ( 6 == bluebutton) { panel.setbackground(color.blue); 設問 1 1 にはイベントリスナーの登録をするための処理が入る 正しい答えを解答群(a)~(d) の中から選べ 解答群 (a) redbutton.addmouselistener (this); greenbutton.addmouselistener(this); bluebutton.addmouselistener (this); 13
2008/12/10 OOP 同演習小テスト問題 (b) redbutton. addwindowlistener (this); greenbutton. addwindowlistener (this); bluebutton. addwindowlistener (this); (c) redbutton.addactionlistener(this); greenbutton.addactionlistener(this); bluebutton.addactionlistener(this); (d) redbutton.add(this); greenbutton.add(this); bluebutton.add(this); 設問 2 2 ~ 6 に入る正しい答えを解答群(a)~(e) の中から選べ 解答群 (a)e.getsource() (b)flowlayout() (c)getcontentpane() (d)jpanel() (e)swingevent() 14