シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

Similar documents
グラフを表すデータ構造 Javaでの実装

JAVA とテンプレート

Graphical User Interface 描画する

文字列操作と正規表現

最初に

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

r3.dvi

Java演習(9) -- クラスとメソッド --

Java演習(4) -- 変数と型 --

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

アプレットの作成

今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

6 p.1 6 Java GUI GUI paintcomponent GUI mouseclicked, keypressed, actionperformed mouseclicked paintcomponent thread, 1 GUI 6.0.2, mutlithread C

< F2D B838A835882CC8CF68EAE2E6A7464>

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

Thread

< F2D834F838C A815B A CC>

r2.dvi

二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

問題1 以下に示すプログラムは、次の処理をするプログラムである

問題1 以下に示すプログラムは、次の処理をするプログラムである

Microsoft PowerPoint prog1_doc2x.pptx

< F2D82B682E182F182AF82F12E6A7464>

新・明解Java入門

ガイダンス


< F2D825282CC947B909482CC A815B83682E6A>

< F2D F B834E2E6A7464>

表示の更新もそういた作業のひとつに当たる スレッドの使用アニメーション アニメーションやシミュレーションなどは画面の更新が一定のタイミングで行われていく この連続した画面の更新をスレッドを利用して行う しかし paint() メソッドを直接呼び出して表示を更新することはできない その理由

19 3!! (+) (>) (++) (+=) for while 3.1!! (20, 20) (1)(Blocks1.java) import javax.swing.japplet; import java.awt.graphics;

Microsoft PowerPoint - OOP.pptx

< F2D92DE82E8914B82CC977088D32E6A7464>

I. (i) Java? (A). 2Apples (B). Vitamin-C (C). Peach21 (D). Pine_Apple (ii) Java? (A). Java (B). Java (C). Java (D). JavaScript Java JavaScript Java (i

< F2D82518CC282CC D2E6A7464>

グラフの探索 JAVA での実装

ガイダンス

Java - Visual Editor

Java演習(6) -- 条件分岐 --

のようにする 上の例では GeneralPath を new するときに コンストラクタに何も指定していないが 直線を表す Line, 四角形を表す Rectangle などを引数に与えてもよい 矢印を作成するメソッドの引数矢印を表す GeneralPath を生成するために getarrowpat

GUIプログラムⅣ

< F2D8EA CE909482CC92EA82852E6A7464>

IT プロジェクト

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

II Java :30 12:00 I. I IV II. III. IV. ( a d) V. : this==null, T == N A ActionListener C class D actionperformed G getsource I implements K

Microsoft PowerPoint prog1_doc2.pptx


I. java.awt.rectangle java.lang.math random Java TM API java.awt Rectangle Rectangle (x,y)... public int x Rectangle X public int y Rectangle Y public

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい

Cir

I HTML HashMap (i) (ii) :.java import java.net.*; import java.io.*; import java.util.hashmap; public class SimpleStopWatch { public static voi

226

Applet java.lang.object java.awt.component java.awt.container java.awt.panel java.applet.applet

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

vol.30.}...`.X...b.h

PowerPoint Presentation

Microsoft PowerPoint ppt

例外(exception)とは何か

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

ALG ppt

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

CollectionsとLambda式

問1

Java 2 - Lesson01

JavaプログラミングⅠ

解きながら学ぶJava入門編

untitled

GUIプログラムⅤ

ALG2012-C.ppt

PowerPoint プレゼンテーション

Programming-C-9.key

< F2D BCA82CC978E89BA82CC8EC08CB12E6A7464>

r4.dvi

2 // TODO Auto-generated method stub float x = event.getx(); float y = event.gety(); String action = ""; switch(event.getaction()) { case MotionEvent.

r14.dvi

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Animals サンプル Step 1 動物の種類を指定しておいて クリックした場所に画像を貼り付ける < レイアウトについて > 前回は ラベルやボタンの位置を座標で設定した Absolute Layout を選んだためである レイアウトは どのようにボタンなどのコンポーネントを配置するかを決定す

r2.dvi

Java演習(2) -- 簡単なプログラム --

:30 12:00 I. I VII II. III. IV. ( a d) V. VI : this==null, T == N A ActionListener A addactionlistener C class D actionperformed

アプレットⅤ

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

Java講座

:30 12:00 I. I VII II. III. IV. ( a d) V. VI : this==null, T == N A ActionListener A addactionlistener C class D actionperforme

ソフトウェア開発方法論2

:30 12:00 I. I V II. III. IV. ( a d) V. VI : A ActionListener aa addactionlistener AE ActionEvent K KeyListener ak addkeyliste

Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web up

Program Design (プログラム設計)

5 p Point int Java p Point Point p; p = new Point(); Point instance, p Point int 2 Point Point p = new Point(); p.x = 1; p.y = 2;

Microsoft PowerPoint ppt

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i +=

text_10.dvi

2

Transcription:

例 : 簡単な酔歩シミュレーション 1 オブジェクト指向プログラミング特論

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

簡単な二次元酔歩 Walker は二次元面内で 4 方向に等確率で移動 メソッド move で移動し 新しい位置を返す Simulation クラス 多数の Walker を同時に移動 メソッド onestep は一時間ステップ進め Walker の新しい位置のリストを返す 3 オブジェクト指向プログラミング特論

4 オブジェクト指向プログラミング特論

動作を表示するパネル Runnable インターフェイスを付ける スレッドとして動作スレッドからの駆動はrunメソッド 描画イメージを作る :mkimage イメージ初期化 Simulation.oneStep を呼び 位置を取得位置を表示 5 オブジェクト指向プログラミング特論

6 オブジェクト指向プログラミング特論

全体構成 SimulationFrame ボタン ( 開始 停止 終了 ) Walker 数設定 DrawPanelをスレッドで起動 7 オブジェクト指向プログラミング特論

8 オブジェクト指向プログラミング特論

Walker.java /** * Walker のクラス * @author tadaki package model; import java.awt.point; public class Walker { private Point p;//walker の位置 public Walker(Point p) { this.p = p; public Walker() { p = new Point(0, 0); /** * 一時間ステップの移動 * @return 新しい位置 public Point walk() { /** 4 方向に等確率で移動する * int r = (int) (4 * Math.random()); int x = 2 * (r % 2) - 1; int y = 2 * (r / 2) - 1; x += p.x; y += p.y; p.move(x, y); return new Point (p); 1/1 ページ

Simulation.java /** * 二次元酔歩モデルのシミュレーション * @author tadaki package model; import java.awt.point; import java.util.arraylist; import java.util.collections; import java.util.list; public class Simulation { private List<Walker> walkers=null;//walker のリスト public Simulation(int n) { walkers = Collections.synchronizedList(new ArrayList<Walker>()); /** Walker を初期化 for(int i=0;i<n;i++){ walkers.add(new Walker()); /** * 一時間ステップの動作 * @return 更新した Walker の位置の一覧 public List<Point> onestep(){ List<Point> plist = Collections.synchronizedList(new ArrayList<Point>()); for(walker w:walkers){ Point p = w.walk(); plist.add(p); return plist; /** * @param args the command line arguments public static void main(string[] args) { Simulation sys=new Simulation(100); for(int i=0;i<100;i++){ sys.onestep(); 1/2 ページ

Simulation.java List<Point> plist = sys.onestep(); for(point p:plist){ System.out.print(p.x); System.out.print(" " ); System.out.println(p.y); 2/2 ページ

DrawPanel.java * /* * DrawPanel.java * 酔歩シミュレーションの画面表示 * Created on 2010/12/17, 9:19:40 * @author tadaki package gui; import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.awt.image; import java.awt.point; import java.util.list; public class DrawPanel extends javax.swing.jpanel implements Runnable { private Image image = null; private volatile boolean running = false; private model.simulation sys = null; private int tmax = 0; private int r = 2; private int t; /** Creates new form DrawPanel public DrawPanel() { initcomponents(); /** * 酔歩シミュレーションの初期化 * @param n Walker 数 * @param tmax 時間上限 public void setparameter(int n, int tmax) { this.tmax = tmax; sys = new model.simulation(n); running = false; t = 0; public void start(boolean running) { this.running = running; 1/3 ページ

DrawPanel.java * public void run() { while (running) { mkimage(); repaint(); if (t > tmax) { running = false; try { Thread.sleep(100); catch (InterruptedException e) { @Override public void paint(graphics g) { if (image == null) { return; g.drawimage(image, 0, 0, this ); /** 描画イメージ作成 * private void mkimage() { if (sys == null) { return; Dimension dimension = getsize(); image = createimage(dimension.width, dimension.height); Graphics g = image.getgraphics(); g.setcolor(getbackground()); g.fillrect(0, 0, dimension.width, dimension.height); g.setclip(0, 0, dimension.width, dimension.height); g.translate(dimension.width / 2, dimension.height / 2); List<Point> plist = sys.onestep(); g.setcolor(color.red); for (Point p : plist) { g.filloval(p.x - r, p.y - r, 2 * r, 2 * r); t++; 2/3 ページ

DrawPanel.java * /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated Code">//GEN-BEGIN:initComponents private void initcomponents() { // 省略 // </editor-fold>//gen-end:initcomponents // Variables declaration - do not modify//gen-begin:variables // End of variables declaration//gen-end:variables 3/3 ページ

SimulationFrame.java * /* * To change this template, choose Tools Templates * and open the template in the editor. /* * SimulationFrame.java * * Created on 2010/12/17, 9:16:41 package gui; /** * * @author tadaki public class SimulationFrame extends javax.swing.jframe { /** Creates new form SimulationFrame public SimulationFrame() { initcomponents(); /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated Code">//GEN-BEGIN:initComponents private void initcomponents() { // 省略 // </editor-fold>//gen-end:initcomponents private void quitactionperformed(java.awt.event.actionevent evt) {//GEN-FIRST:event_quitActionPerformed System.exit(0); //GEN-LAST:event_quitActionPerformed private void startactionperformed(java.awt.event.actionevent evt) {//GEN-FIRST:event_startActionPerformed int n = nslider.getvalue(); 1/2 ページ

SimulationFrame.java * int t= 2*drawPanel.getSize().width; drawpanel.setparameter(n,t); drawpanel.start(true ); new Thread(drawPanel).start(); //GEN-LAST:event_startActionPerformed private void stopactionperformed(java.awt.event.actionevent evt) {//GEN-FIRST:event_stopActionPerformed drawpanel.start(false ); //GEN-LAST:event_stopActionPerformed private void nsliderstatechanged(javax.swing.event.changeevent evt) {//GEN-FIRST:event_nSliderStateChanged int n = nslider.getvalue(); numlabel.settext("# "+String.valueOf(n)); //GEN-LAST:event_nSliderStateChanged /** * @param args the command line arguments public static void main(string args[]) { java.awt.eventqueue.invokelater(new Runnable() { public void run() { new SimulationFrame().setVisible(true ); ); // Variables declaration - do not modify//gen-begin:variables private javax.swing.jpanel buttons; private gui.drawpanel drawpanel; private javax.swing.jslider nslider; private javax.swing.jlabel numlabel; private javax.swing.jbutton quit; private javax.swing.jbutton start; private javax.swing.jbutton stop; // End of variables declaration//gen-end:variables 2/2 ページ