計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例

Slides:



Advertisements
Similar presentations
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Advertisements

山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング基礎I(再) 山元進.
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
ファーストイヤー・セミナーⅡ 第8回 データの入力.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
第6章 2重ループ&配列 2重ループと配列をやります.
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
プログラミングIII演習 第1回目.
第20章 Flyweight ~同じものを共有して無駄をなくす~
オブジェクト指向入門.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング言語入門 手続き型言語としてのJava
JAVA入門.
アルゴリズムとプログラミング (Algorithms and Programming)
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
計算機プログラミングI 第10回 データ構造とクラスの設計 例題: 話題: 複素数 図形要素 Morphing 複雑な値を一つにまとめる
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
前回の練習問題.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
計算機プログラミングI 第11回 再帰 再帰的なメソッド定義 帰納的定義 再帰的なデータ構造 計算機プログラミングI (増原) 2003年度.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
計算機プログラミングI 第8回 素数を見つけるアルゴリズム 継承とインスタンスメソッド クラスの設計 オブジェクトに機能を加える
計算機プログラミングI 第12回 スレッド インターフェース 授業アンケート 計算機プログラミングI (増原) 2003年度.
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとプログラミング (Algorithms and Programming)
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
精密工学科プログラミング基礎 第7回資料 (11/27実施)
情報処理Ⅱ 第7回 2004年11月16日(火).
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例

モーフィング 繰り返しをする タートル0は円の一部を描く タートル9は星形の一部を描く タートルkはタートル0とタートル9の位置を k : (9-k) に内分する点に 移動する Turtle m0 = new Turtle(); Turtle m1 = new Turtle(); … Turtle m9 = new Turtle(); for (int i = 0; i < steps; i++) { m0とm9を移動 int x0 = m0.getX(), y0 = m0.getY(); int x9 = m9.getX(), y9 = m9.getY(); m1.moveTo(1*(x9-x0)/9+x0,1*(y9-y0)/9+y0,0); m2.moveTo(2*(x9-x0)/9+x0,2*(y9-y0)/9+y0,0); m3.moveTo(3*(x9-x0)/9+x0,3*(y9-y0)/9+y0,0); } 計算機プログラミングI (増原) 2003年度

モーフィング 繰り返しをする 同じ種類の変数が 繰り返し現われる  配列 タートル0は円の一部を描く タートル9は星形の一部を描く タートルkはタートル0とタートル9の位置を k : (9-k) に内分する点に 移動する Turtle m0 = new Turtle(); Turtle m1 = new Turtle(); … Turtle m9 = new Turtle(); for (int i = 0; i < steps; i++) { m0とm9を移動 int x0 = m0.getX(), y0 = m0.getY(); int x9 = m9.getX(), y9 = m9.getY(); m1.moveTo(1*(x9-x0)/9+x0,1*(y9-y0)/9+y0,0); m2.moveTo(2*(x9-x0)/9+x0,2*(y9-y0)/9+y0,0); m3.moveTo(3*(x9-x0)/9+x0,3*(y9-y0)/9+y0,0); } 計算機プログラミングI (増原) 2003年度

配列とは何か 変数の列を1つにまとめたオブジェクト (cf. ベクトル・数列) 例 整数10個の 配列 Turtle型 オブジェクト 10個の配列 3 1 9 11 8 4 5 17 24 hm = marks = 計算機プログラミングI (増原) 2003年度

配列の使い方 配列「型」 配列を作る 10個のタートルを しまうための配列を作り、それぞれの 要素にタートルを作ってしまう public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 10個のタートルを しまうための配列を作り、それぞれの 要素にタートルを作ってしまう 配列のi番目を とり出す 配列のi番目に 代入する 計算機プログラミングI (増原) 2003年度

配列の使い方 配列をしまうための変数ができる hm public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 配列をしまうための変数ができる hm 計算機プログラミングI (増原) 2003年度

配列の使い方 タートルを10個しまうための変数ができる hm public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 タートルを10個しまうための変数ができる hm 計算機プログラミングI (増原) 2003年度

配列の使い方 hmに配列が しまわれる 最初は全ての hm 中身がnull (空) public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 hmに配列が しまわれる hm 最初は全ての 中身がnull (空) 計算機プログラミングI (増原) 2003年度

配列の使い方 Turtleオブジェクトができる hm Turtle public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 hm Turtleオブジェクトができる Turtle 計算機プログラミングI (増原) 2003年度

配列の使い方 このときのiは 0なので0番目 配列の0番目に オブジェクトが hm しまわれる Turtle public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 このときのiは 0なので0番目 配列の0番目に オブジェクトが しまわれる hm Turtle 計算機プログラミングI (増原) 2003年度

配列の0番目の オブジェクトが とり出されて フレームに追加される 配列の使い方 public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 配列の0番目の オブジェクトが とり出されて フレームに追加される hm Turtle 計算機プログラミングI (増原) 2003年度

配列の使い方 i=0, i=1の繰り返しが 終った後 hm Turtle Turtle public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 i=0, i=1の繰り返しが 終った後 hm Turtle Turtle 計算機プログラミングI (増原) 2003年度

配列の使い方 繰り返しが終った後 hm Turtle Turtle Turtle Turtle Turtle Turtle Turtle public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 繰り返しが終った後 hm Turtle Turtle Turtle Turtle Turtle Turtle Turtle Turtle Turtle Turtle 計算機プログラミングI (増原) 2003年度

配列のまとめ “int[ ] marks;” や “Turtle[ ] hm;” のように配列型の変数を宣言する 配列をしまうための変数が作られる。配列ができるのではない。 “marks = new int[10];” “hm = new Turtle[10];” のように配列を作って変数に代入する “[ ]”の中は個数。数式でもよい “marks[3] = 123;” や “hm[i] = new Turtle();” のように値を代入する “marksの3番目”に代入せよ、という意味 番号は0から始まる。数式でもよい “sum = sum + marks[i];” や “hm[k/3].fd(100);” のように値を参照する “i < makrs.length” のように長さを求める 計算機プログラミングI (増原) 2003年度

多次元の配列 Turtle [ ] [ ] hm = new Turtle[3][4]; hm[1][2] hm → Turtle 計算機プログラミングI (増原) 2003年度

多次元の配列 Turtle [ ] [ ] hm = new Turtle[3][4]; hm[1][2] hm → 計算機プログラミングI (増原) 2003年度

文字列(Stringクラス)(5.4) Java言語では文字列は String クラスのオブジェクトとして表わされる 文字列を作る 引用符記号「”」で囲んで固定した内容を表現 (eg. System.out.println(“Hello”); ) 文字列化メソッドを呼び出して値を文字列に変換 (eg. Turtle m = new Turtle(); System.out.println(m.toString()); System.out.println(new Integer(10).toString()); ) 文字列と値を結合して自動的に変換 (eg. int n = 2; System.out.println(“You’re no.“ + n);) 文字列を使う Stringクラスのメソッドを使って大文字・小文字変換・一部をとり出す・ つなげる等々 (eg. System.out.println(“wonderful”.toUpper());) 文字列から数に変換する (eg. int x = Integer.parseInt(“123”); int y = Double.parseDouble(“3.14”);) 漢字コードに注意が必要 javac –enocding euc-jp Hello.java javac –encoding shift_jis Hello.java 計算機プログラミングI (増原) 2003年度

mainの引数 (5.5) 実はここにも配列が使われている public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 実はここにも配列が使われている 意味: プログラムを実行したときの コマンドラインの引数が順に配列に しまわれている 例: “java T51 123 ok” のように実行をした場合、 args[0] には “123” が args[1] には “ok” がしまわれている 計算機プログラミングI (増原) 2003年度

mainの引数 (5.5) 整数に変換 一番目の引数 (文字列) java T51 12 のように実行すると、12匹のタートルが作られる public class T51 { public static void main(String[] args){ int numTurtles = Integer.parseInt(args[0]); TurtleFrame f = new TurtleFrame(600,300); Turtle[ ] hm = new Turtle[numTurtles]; for(int i = 0 ; i < numTurtles; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } //略 一番目の引数 (文字列) java T51 12 のように実行すると、12匹のタートルが作られる  コンパイルし直さずともプログラムの動きを変えられる 計算機プログラミングI (増原) 2003年度

配列を利用したプログラム(1) 滑らかな曲線 3点 p0, p1, p2 を滑らかにつなぐ曲線の1つは次の方程式で与えられる: p(t) = (1-t)2p0+2(1-t)tp1+t2p2 (0  t  1) プログラム: 3点をクリックして入力 タートルを最初の点に移動 t を 0 から 1 まで 1/n きざみで変化 X成分,Y成分を上式に従って計算 タートルを移動 長い曲線を描くには p0, p1, p2, … pN を入力 i を0からN-3まで変化さ せて pi, pi+1, pi+2 を曲線でつなぐ 計算機プログラミングI (増原) 2003年度

配列を利用したプログラム(2) モーフィング 同じ種類の変数が 繰り返し現われる  配列 繰り返しをする タートル0は円の一部を描く タートル9は星形の一部を描く タートルkはタートル0とタートル9の位置を k : (9-k) に内分する点に 移動する Turtle m0 = new Turtle(); Turtle m1 = new Turtle(); … Turtle m9 = new Turtle(); for (int i = 0; i < steps; i++) { m0とm9を移動 int x0 = m0.getX(), y0 = m0.getY(); int x9 = m9.getX(), y9 = m9.getY(); m1.moveTo(1*(x9-x0)/9+x0,1*(y9-y0)/9+y0,0); m2.moveTo(2*(x9-x0)/9+x0,2*(y9-y0)/9+y0,0); m3.moveTo(3*(x9-x0)/9+x0,3*(y9-y0)/9+y0,0); } 計算機プログラミングI (増原) 2003年度

配列を利用したプログラム(3) 手描きの絵の繰り返し 手順 1. 画面上を何回かクリックさせ、 その位置を順に覚える 2. (円周の各点に移動して) 覚えた位置に順に移動してゆく ポイント: 縮小・回転が簡単にできるように 距離と角度を覚える 移動の際に距離を半分等にすることで 縮小した図を描く 計算機プログラミングI (増原) 2003年度

配列を利用したプログラム(3) 手描きの絵の繰り返し q1 直前の位置 (x1,y1) angles[0]=q 0, angles[1]= q 1, … distances[0]=l0, distances[1]=l1, … となるように覚える q (dx,dy) q = atan(dx/dy) (ラジアン) (y>0) q 0 l1 l0 (x0,y0) (x2,y2) 新しい位置 計算機プログラミングI (増原) 2003年度

配列を利用したプログラム(4) 記憶力テスト 手順: N匹のタートルを配置 大きさMの整数の配列pを作り、そこに 0~(N-1)の乱数をしまう iを0からM-1まで変化させ、順に p[i]番目のタートルを回転 iを0からM-1まで変化させ、 クリックされた場所から番号を求め p[i]と照合、一致していれば回転 一致していなければ中断 計算機プログラミングI (増原) 2003年度

配列を利用したプログラム(5) 細胞状自動機械(cellular automata) ある時点のタートルの配置が あったときに、次の時点では 周囲に3匹のタートルがいれば 空のマスにタートルが生まれる 周囲に2or3匹のタートルが いれば、そのタートルは生き 残る  「現在の配置」「次の配置」 をそれぞれ2次元のタートル 型の配列で表わす 計算機プログラミングI (増原) 2003年度