演習問題13解答例

問1 3 つの図形
問2 整数の加減算
問3 ピクセル操作

[問1]適当な図形を 3 つ描き,それらの図形に対する説明を各図形の上に表示する表示するプログラムを書け.
/****************************/
/* 様々な図形               */
/*      coded by Y.Suganuma */
/****************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test {
	public static void main (String[] args)
	{
		Win win = new Win("図形の描画");
	}
}

class Win extends JFrame {
	/******************/
	/* コンストラクタ */
	/******************/
	Win(String name)
	{
				// JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
				// Windowの大きさ
		setSize(300, 170);
				// 背景色
		setBackground(new Color(255, 255, 255));
				// 描画パネル
		DrawPanel pn = new DrawPanel();
		getContentPane().add(pn);   
				// ウィンドウを表示
		setVisible(true);
				// イベントアダプタ
		addWindowListener(new WinEnd());
	}

	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(50, 20, 20, 20);
	}

	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}
}
				// DrawPanel
class DrawPanel extends JPanel
{
					// 描画
	public void paint (Graphics g)
	{
		Font f = new Font("TimesRoman", Font.PLAIN, 15);
		g.setFont(f);
		g.drawOval(10, 25, 80, 50);
		g.drawString("楕円", 35, 55);
		g.drawRect(120, 25, 50, 50);
		g.drawString("正方形", 123, 55);
		int x[] = {225, 250, 200};
		int y[] = {25, 75, 75};
		int pt = x.length;
		g.drawPolygon(x, y, pt);
		f = new Font("TimesRoman", Font.PLAIN, 10);
		g.setFont(f);
		g.drawString("三角形", 210, 70);
	}
}
		
[問2]2 つの整数データに対する加算または減算を行い,その正誤を判定するプログラムを作成せよ.データや加算または減算の選択は各問題毎に乱数を使用し,正解だった場合は,新たな問題を表示するものとする.
/****************************/
/* 加減算の練習             */
/*      coded by Y.Suganuma */
/****************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Test {
	public static void main (String[] args)
	{
		Win win = new Win("整数の加算・減算");
	}
}

class Win extends JFrame implements ActionListener {
	JButton bt;
	JTextField tx;
	JTextArea ta;
	JLabel lbl;
	Random rn;
	int a, b, op;

	/******************/
	/* コンストラクタ */
	/******************/
	Win(String name)
	{
					// JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
					// Windowの大きさ
		setSize(410, 210);
					// フォント,背景色,乱数初期設定の設定
		Container cp = getContentPane();
		cp.setLayout(new FlowLayout(FlowLayout.CENTER));
		Font f = new Font("MS 明朝", Font.BOLD, 20);
		cp.setFont(f);
		cp.setBackground(new Color(225, 255, 225));
		rn = new Random();
					// 1行目
							// 問題
		String str = problem();
		lbl = new JLabel(str);
		lbl.setFont(f);
		cp.add(lbl);
							// テキストフィールド(答え)
		tx = new JTextField(5);
		tx.setFont(f);
		cp.add(tx);
							// ボタン
		cp.add(new JLabel(" "));
		bt = new JButton("チェック");
		bt.setBackground(Color.pink);
		bt.addActionListener(this);   // リスナー
		bt.setFont(f);
		cp.add(bt);
					// 2行目
							// テキストエリア
		ta = new JTextArea(3, 25);
		ta.setFont(f);
		cp.add(ta);
					// ウィンドウを表示
		setVisible(true);
					// イベントアダプタ
		addWindowListener(new WinEnd());
	}

	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(50, 20, 20, 20);
	}

	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}

	/**************/
	/* 問題の設定 */
	/**************/
	String problem()
	{
		String str = "";
					// a
		a = -50 + (int)(rn.nextDouble() * 100);
		if (a < 0)
			str += "-";
		str += Integer.toString(Math.abs(a));
					// 演算子
		if (rn.nextDouble() < 0.5) {
			op   = -1;
			str += " - ";
		}
		else {
			op   = 1;
			str += " + ";
		}
					// b
		b = -50 + (int)(rn.nextDouble() * 100);
		if (b < 0)
			str += "(-";
		str += Integer.toString(Math.abs(b));
		if (b < 0)
			str += ")";
		str += " =";
		return str;
	}
	/******************************/
	/* ボタンが押されたときの処理 */
	/******************************/
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == bt) {
			int c, d;
			if (tx.getText().length() <= 0)
				ta.setText("答えを入力して下さい!");
			else {
				c = Integer.parseInt(tx.getText());
				if (op > 0)
					d = a + b;
				else
					d = a - b;
				if (d == c) {
					ta.setText("正解です!\n新しい問題をやって下さい");
					lbl.setText(problem());
					tx.setText("");
				}
				else
					ta.setText("間違っています!\nもう一度計算して下さい");
			}
		}
	}
}
		
[問3]ピクセル値を直接操作することによって,適当な画像を描いてみよ.

菅沼ホーム 演習解答例目次 本文目次 付録 索引