アルゴリズムとプログラミング (Algorithms and Programming)

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
アルゴリズムとデータ構造 2012年6月27日
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとデータ構造 2011年6月13日
アルゴリズムとプログラミング (Algorithms and Programming)
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第20章 Flyweight ~同じものを共有して無駄をなくす~
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
補足説明.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング2 関数
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
関数の定義.
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
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回.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2011年6月23日
プログラミング 3 2 次元配列.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2012年7月2日
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造 2013年7月2日
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
アルゴリズムとデータ構造1 2009年6月15日
第5回 プログラミングⅡ 第5回
アルゴリズムとデータ構造 2012年6月25日
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング入門2 第5回 配列 変数宣言、初期化について
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

アルゴリズムとプログラミング (Algorithms and Programming) 第7回:コンストラクタ、配列 コンストラクタ メソッドのオーバーロード 配列 講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

コンストラクタとは 記法: オブジェクトが生成される時に自動的に呼び出される特別なメソッド メソッド名は必ずクラス名と一致する 戻り値の型を指定することはできない だからといってvoidを指定してはならない 記法: 修飾子 クラス名(仮引数の並び) { 処理の記述; }

コンストラクタの定義と呼び出し 定義 呼び出し class Point { // 点クラス double x; // x座標 double y; // y座標 public Point(double xx, double yy ){ x = xx; y = yy; } class SamplePoint { public static void main(String[] args) { Point p = new Point( 1.0, 2.0 ); System.out.println("x座標は"+ p.x + " y座標は"+ p.y ); 定義 呼び出し

コンストラクタの定義が無かったら 実はコンストラクタだった! Cat p = new Cat(); 自動的にデフォルトコンストラクタが用意され、オブジェクトの生成時に呼び出される Point( ) { } 修飾子も引数も処理内容も無いコンストラクタ インスタンス生成時の記法: Cat p = new Cat(); 実はコンストラクタだった!

フィールドの初期化 初期値の与え方(どの方法でも良い) コンストラクタを利用 setValue()の様な通常のメソッドを定義 フィールド宣言で初期値を代入

フィールド宣言による初期化 インスタンスが生成される際にこの値が代入される class Point { // 点クラス double x = 0.0;  // x座標(0.0で初期化) double y = 0.0 ; // y座標(0.0で初期化) } class SamplePoint { public static void main(String[] args) { Point p = new Point(); System.out.println("x座標は" + p.x + " y座標は" + p.y ); インスタンスが生成される際にこの値が代入される

引数の数が異なっているか、引数の型が異なっていること 戻り値の有無とは無関係 メソッドのオーバーロード 一つのクラスの中に、同じ名前のメソッドを複数定義することができる ただし... 引数の数が異なっているか、引数の型が異なっていること 戻り値の有無とは無関係 要するに.. 引数を比べてお互いに区別が付けば、名前が同じでも異なるメソッドとして認識される

メソッドのオーバーロードの例 Sample2601.java class Sample2601 { void printValue(int i) { System.out.println("i = " + i ); } void printValue(double d) { System.out.println("d = " + d ); void printValue(int i, double d) { public static void main(String[] args) { Sample2601 o = new Sample2601(); o.printValue(100); o.printValue(0.25); o.printValue(100,0.25); 引数に応じて、それぞれ対応する メソッドが自動的に呼び出される

オーバーロード:間違いの例 Sample2602.java class Sample2602 { void printValue(int i) { System.out.println("i = " + i ); } int printValue(int i) { return i; public static void main(String[] args) { Sample2601 o = new Sample2601(); o.printValue(100); int a = o.printValue(200); 戻り値は異なるが、引数で区別が 付かないのでコンパイルエラー

コンストラクタのオーバーロード 複数のコンストラクタを定義可能 class Point { // 点クラス double x; // x座標 double y; // y座標 public Point(){ x = 0; y = 0; } public Point(double xx, double yy ){ x = xx; y = yy; class SamplePoint { public static void main(String[] args) { Point p0 = new Point(); Point p1 = new Point( 1.0, 2.0 ); 複数のコンストラクタを定義可能

コンストラクタから別のコンストラクタを呼び出すことも可 class Point { // 点クラス double x; // x座標 double y; // y座標 public Point(){ this(0.0,0.0); } public Point(double xx, double yy ){ x = xx; y = yy; class SamplePoint2 { public static void main(String[] args) { Point p0 = new Point(); Point p1 = new Point( 1.0, 2.0 ); thisにより、別に定義されたコンストラ クタを呼び出せる。 コンストラクタの最初の行でのみ使用可

int型ならint,doubleならdouble 配列 一つの変数に添え字を付けることにより複数の値を格納するしくみ 例) 配列要素の書式) int型の値を格納するメモリ領域 を複数個(N個)準備する a[0] a[0] a[1] 配列要素 a[2] 識別子 添え字 0から始まる 配列要素の型は全部同じ int型ならint,doubleならdouble a[N-1]

配列の宣言と利用法 1行で宣言する書式例) int a[ ] = new int[10] ; 2行に分割する書式例) int a[ ] ; クラスからインスタンスを生成するときと類似 newキーワードを使う 1行で宣言する書式例) intなどの型名がクラス名に相当 配列要素の数を[ ]で指定 配列添え字が0から始まることに注意せよ int a[ ] = new int[10] ; 2行に分割する書式例) a[0] a[1] int a[ ] ; a = new int[10] ; 10個分 a[9] 10個分しか宣言してなければエラー []は不要 a[10] 配列要素10個分を宣言

配列要素への値の代入 a[0] = 1 ; a[1] = 100 ; a[2] = - 77 ; 配列要素の数が足りなくなっても後で追加できない!!最初の指定が大事。 配列添え字のオーバーフローに注意!!

int a[ ] = {20, 100, -40} ; newキーワードを使わない配列の宣言 int a[ ] = new int[3] ; 全ての配列要素を明示的に記述 int a[ ] = new int[3] ; a[0] = 20; a[1] = 100; a[2] = - 40;

配列の識別子は参照型変数である int a[ ] ; a = new int[10] ; int b[]; b = a; を格納している int a[ ] ; a = new int[10] ; int b[]; b = a; a[0] a[1] a[2] 別の配列識別子bを定義して aの内容をbに代入すると.. b a a[9] bもaと同じ配列の先頭番地を 格納することになるので... たとえば b[0]はa[0]と同じ値 b[3]はa[3]と同じ値 aは参照型変数(番地を格納) a[0]等で中身にアクセス 一つのメモリ領域を指している参照型変数は一つとは限らない

配列のサイズを知る Sample2301.java class Sample2301 { public static void main(String[] args) { int array[] = {20,100,-40,500,70}; for(int i = 0; i < array.length; i++ ){ System.out.println( "array[" + i + "]= " + array[i] ); } 実行結果 array[0]= 20 array[1]= 100 array[2]= -40 array[3]= 500 array[4]= 70

配列の応用 問題: 与えられた配列の要素を、大きい順に並べ替えなさい 方針(例): 配列の先頭から、一つ一つ順番に値を比べて、大きい値と出会ったら入れ替える 配列添え字i a[0] work 入れ替え用 一時記憶変数 a[1] 配列添え字j a[2] a[3] a[4]

SampleAPP0701.java class SampleAPP0701 { public static void main(String[] args) { int array[] = {20,100,-40,500,70};//与えられた配列 int work; //入れ替え用の一時メモリ for(int i = 0; i < array.length - 1; i++ ){ for(int j = ; j < ; j++ ){ if( array[i] < array[j] ) { //大きな数字と出会ったら work = array[ ]; //入れ替える array[ ] = array[ ]; array[ ] = work; } } //以下は結果の表示 for(int i=0; i < array.length; i++ ){ System.out.println( "array[" + i + "]= " + array[i] );

SampleAPP0701.java class SampleAPP0701 { public static void main(String[] args) { int array[] = {20,100,-40,500,70};//与えられた配列 int work; //入れ替え用の一時メモリ for(int i = 0; i < array.length - 1; i++ ){ for(int j = i+1; j < array.length; j++ ){ if( array[i] < array[j] ) { //大きな数字と出会ったら work = array[i]; //入れ替える array[i] = array[j]; array[j] = work; } } //以下は結果の表示 for(int i=0; i < array.length; i++ ){ System.out.println( "array[" + i + "]= " + array[i] );

まとめ コンストラクタ メソッドのオーバーロード 配列の宣言と使用例