fundamentals of ai programming in javajava アプレット vs アプリケーション...

27
L2: Fundamentals of AI Programming in Java Javaアプレット ArrayList HashMap

Upload: others

Post on 19-Apr-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

L2: Fundamentals of AI Programming in Java

Javaアプレット ArrayList HashMap

Page 2: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

AI 応用の例 – 探索問題

Page 3: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

Javaアプレット VS アプリケーション

avaアプレットとは、htmlに貼り付けられるjavaで作成した小規模のプログラムのことで、サーバー側からクライアントマシンに送られ、ブラウザ上に読み込まれて実行される。

ブラウザとHTMLの機能と表現力の制約にしばられずに、インタラクティブな動作や、より高い表現を用いることができる。

Page 4: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

AppletTest.java (Appletの起動) //AppletをimportしないとAppletを使えない

import java.applet.Applet; //AppletにするにはAppletを継承する

public class AppletTest extends Applet { // Appletを起動した時に初めに実行されるメソッド

public void init() { // Appletの大きさの設定

setSize(300, 500); } } 実行例→

←パッケージは各自適当につけること

※mainメソッドが不要なことに注意

Page 5: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

AddTest.java(コンポーネントの追加) これはプログラムの一部です。完全版はプロジェクトサイトにあります // ボタンの作成 Button b1 = new Button("ボタン"); Button b2 = new Button(); // ラベルの作成 Label l1 = new Label("ラベル"); Label l2 = new Label(); public void init() { setSize(100, 200); // 作成してもadd()でApplet上に追加しないと表示されない add(b1); add(b2); add(l1); add(l2); } 実行例→

Page 6: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ActionTest.java(アクションの追加) // ボタンが押された時にイベントを発生させたい場合は // ActionListenerに登録する b1.addActionListener(this); add(b1); add(b2); add(l1); add(l2); }

// ボタンが押された時に実行されるメソッド public void actionPerformed(ActionEvent arg0) {

JOptionPane.showMessageDialog(null, "ボタンが押されました"); }

Page 7: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

PaintTest.java(描画) public void actionPerformed(ActionEvent arg0) { // 押されたら数を増やす i++; // 再描画 repaint(); } // 描画するメソッド public void paint(Graphics g) { // 文字列の表示 g.drawString("ボタンを押した回数→ " + i, 60, 50); // 直線の表示 g.drawLine(50, 180, 70, 180); // 長方形の表示 g.drawRect(10, 70, 30, 30); }

Page 8: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ArrayListとは何か? ArrayListとは可変長配列クラスである

“キャパシティー”という概念がある

どんな型のオブジェクトでも追加することができる

→普通の配列と違い、いくらでも要素を追加できる Int [] test = new int [5]; と書くと5つまでしか入れられないが ArrayListには制限がない

→可変長のため最終的にいくつの要素が追加されるかわからないので、 動的にキャパシティー(要素を追加するためのメモリー上のスペース)を確保する……が、この講義では無視

→String, int ,double ,自分で作った型……などどれでも追加可能

Page 9: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ArrayListの宣言 ArrayListの宣言には3つの種類がある ArrayList()

ArrayList(int capacity)

ArrayList(Collection c)

→キャパシティーが10の空のArrayListを作る

→キャパシティーがcapacityの空のArrayListを作る (capacityの大きさを自分で決められる)

→初期値がcであるArrayListを作る (cは他のArrayList等)

Page 10: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ArrayListで使えるメソッド public boolean add(Object o) 指定したオブジェクトoを追加する 例:al.add(“要素1”);

public boolean remove(Object o) 指定したオブジェクトを削除する

public Object get(int index) index番目の要素を返す

Page 11: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ArrayListで使えるメソッド public boolean contains(Object o) 指定したオブジェクトoがリストにあるか判断する 例:if(!al.contains(“要素1”)) System.out.println(“要素1はありません”);

public boolean isEmpty() リストが空か判断する(要素数が0かどうか)

public int size() リストにある要素の数を返す

Page 12: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ArrayListで使えるメソッド public void clear() リストの要素を全て削除する

public int indexOf(Object o) 指定した要素の位置を返す

public void ensureCapacity(int min) キャパシティーをmin以上に設定する

この他にもたくさんのメソッドがあります。 詳しくはsunのHPを参照して下さい http://java.sun.com/javase/ja/6/docs/ja/api/java/util/ArrayList.html

Page 13: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ジェネリック ArrayListには、どんな型のオブジェクトでも要素として追

加できる!一見便利に見えるが、取り出す時に面倒なことがある

import java.util.ArrayList; public class ArrayListTest { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(0); al.add(1); al.add(2); System.out.println(al.get(0)+al.get(1)); } }

※実行するとエラーになります

Int型の値を保存していてもGetメソッドはObject型を結果を返すので 足し算できない

Page 14: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ジェネリック 以下のようにすると格納できる型がInteger(int)に制限されるかわりにデータの取り出しが容易になる

import java.util.ArrayList; public class ArrayListTest { public static void main(String[] args) { ArrayList<Integer> al = new ArrayList<Integer>(); al.add(0); al.add(1); al.add(2); System.out.println(al.get(0) + al.get(1)); } }

このような手法をジェネリックと呼ぶ

Page 15: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

練習 ArrayTest.javaのコメントを見ながらコードを書き加え、正しく実行できるようにしてみましょう。

実行例

Page 16: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

HashMapとは HashMapとはキーと値の組の集まりであるデータ構造。わかりやすくいうと可変長配列のindexがなんでもいい版

イメージ

学籍番号 名前

10k0000 法政 ○○

11k9999 法政 △△

09k0000 小金井 ○○

1つの学籍番号に1つの名前が対応していて、学籍番号がわかれば学籍の名前がわかる

キー 値

Page 17: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

HashMapの宣言 宣言には4つの種類がある

HashMap()

初期容量(16)とデフォルトの負荷係数(0.75)で空のHashMapを作成する

HashMap(int initialCapacity) 指定された初期容量とデフォルトの負荷係数(0.75)で空のHashMapを作成する

HashMap(int initialCapacity, float loadFactor) 指定された初期容量と負荷係数で空のHashMapを作成する

HashMap(Map<? extends K,? extends V> m) 指定されたMapと同じマッピングで新規HashMapを作成する

Page 18: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

HashMapで使えるメソッド Public Object put(Object key, Object value) 指定したキーと値をHashMapに追加する 例:hm.put(“11k0000”,”法政○○”);

Public Object get(Object key) 指定したキーに対応する値を取得する Public Object remove(Object key) 指定したキーと対応する値を削除する Public void clear() 要素を全て削除する

Page 19: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

HashMapで使えるメソッド Public boolean isEmpty() 要素が空かどうか判断する Public boolean containsKey(Object Key) 指定したキーがあるかどうか判断する Public boolean containsValue(Object Value) 指定した値があるかどうか判断する

この他にもたくさんのメソッドがあります。 詳しくはsunのHPを参照して下さい http://java.sun.com/javase/ja/6/docs/ja/api/java/util/HashMap.html

Page 20: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

ジェネリックについて ArrayListと同様にHashMapにもジェネリックが使えます

HashMap<String,String>=new HashMap<String,String>();

警告のマークを左クリックすると→のような項目が出るので総称型引数の推測を押せば適したジェネリックを設定してくれる

キーと値、それぞれに設定する

Page 21: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

練習 HashMapTest.javaのコメントを見ながらコードを書き加え、正しく実行できるようにしてみましょう。

Page 22: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

探索プログラム Applet,ArrayList,HashMapについてなんとなく理解できたら探索プログラムを作ってみましょう

Page 23: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

Nodeの作成と表示 Nodeに必要なものを考えてみましょう

Node

(街の)名前 ボタン X座標 Y座標 経路情報 隣接する街情報 隣接する街に引く線

Page 24: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

Node.javaクラスの実装例 import java.awt.Button; import java.util.ArrayList; import java.util.HashMap; //都市クラス public class Node extends Button { // 街の名前 String name; // 座標 private int x, y; // 幅と高さ private int w = 80, h = 20; // 隣接都市 ArrayList<Node> children; // 経路 Node pointer; // 隣接都市への線(隣接都市/隣接都市につなぐ線) HashMap<Node, Line> hm;

Page 25: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

Nodeの表示, 隣接するNode ShowNode.javaを書き加えていくつかのNodeをApplet上に表示し、Nodeをクリックすると都市名をダイアログで表示するようにしてみましょう

Line.java 隣接するNodeに引く線

Page 26: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

探索とは 探索とは人工知能の分野における基本的な要素技術であ

り、今ではカーナビやゲームのAIなど、幅広い分野で応用されている

おおまかに言うと、ある入力に対しいくつもの解を評価して結果を返すこと

この講義では、一般的な幅優先探索と深さ優先探索について学ぶ

Page 27: Fundamentals of AI Programming in JavaJava アプレット VS アプリケーション avaアプレットとは、htmlに貼り付けられ るjavaで作成した小規模のプログラムのこ

宿題

(1) Read through lecture note (AI-2-L2.pptx); 今日の授業内容を復習しなさい。 (2) Run all example Java program source codes (L2-toStudent.zip); 例題を実行してみてください。 (3) Think about how to make a search algorithm to search for a solution from one city to another. ある街から別の街へ向かうルートを探索する プログラムの作成方法を考えてみてください。