第7回:参照データ型 他のクラスのメソッドを利用 プログラミングII 2007年11月6日 本日の講義内容 Javaのデータ型 基本データ型と参照データ型 ラッパクラスの利用 他のクラスのメソッドを呼ぶ コマンドライン引数とは? 前回の復習 Javaの配列 基本のアルゴリズム 合計と平均 最大と最小 単純な整列(ソート) 選択法と交換法 Javaの配列 配列とは? 複数のデータをまとめて取り扱う 番号(インデックス)で管理 a[0], a[1], a[2]….. Javaの配列のルール(1) 記号 [ ] 型が配列であることを示す int[] numbers; String[] names; インデックス番号を指定(データの「背番号」) names[0] = “Maruyama”; 生成時にサイズ(データの個数)の指定 int[] numbers = new int[1000]; Javaの配列のルール(2) 配列への値の代入(初期化) パターン1) 直接全部を初期化 String[] words = { “ABC”, “OPQ”, “XYZ”}; パターン2) サイズのみ先に指定する String[] words = new String[3]; words[0] = “ABC”; words[1] = “OPQ”; words[2] = “XYZ”; Javaの配列のルール(3) インデックス番号は 0 から開始 サイズは .length で利用 int[] data = { 1, 2, 3 }; System.out.println( data[0] ); // 1 を出力 System.out.println( data[1] ); // 2 を出力 System.out.println( data[data.length-1] ); // 3 を出力 × System.out.println( data[data.length] ); Javaの配列とループ 配列のデータをひととおり処理 int[] data = { 1, 2, 3, 4, 5, 6 }; for( int i=0; i<data.length; i++ ) { System.out.println( data[i] ); } 合計を求めるアルゴリズム 初期値 0 の変数を1個用意 その値に次々加算していく int[] data = { 10, 4, 5, 1 }; int s = 0; for( int i=0; i<data.length; i++ ) { s += data[i]; } 平均を求めるアルゴリズム まず合計を求める 合計値をデータの個数で割る int[] data = { 4, 6, 2, 9 }; int s = 0; : float a = ( (float)s )/ data.length; 型変換に注意 最大値を求めるアルゴリズム 「仮の」最大値を定める (例:先頭のデータ) 順に最大値と比較し、より大きい値が見つかっ たら新しい最大値とする int[] data = { 3, 6, 4, 7, 5 }; int m = data[0]; for( int i=1; i<data.length; i++ ) { if( data[i] > m ) m = data[i]; } 単純なソート(選択法) 最大値のアルゴリズムで最大値を探す (最大値は一番端のデータと交換) 残りの中から最大値のアルゴリズムで 2番目に大きいデータを探す (2番目に大きいデータは2番目に端に) さらにその残りから3番目を・・・・ 最後には一番小さいデータが残る(終了!) 選択法の処理の例 0 1 2 3 4 20 13 33 9 16 33 13 20 9 16 33 20 13 9 16 33 20 16 9 13 33 20 16 13 9 選択法のプログラムの例 与えられた配列のN番目を求めて移動 public static void maxN( int[] data, int n) { int m = data[n]; int mi = n; for( int i=n+1; i<data.length; i++ ){ if( data[i] > m ) { m=data[i]; mi=n } } data[mi] = data[n]; data[n] = m; } 単純なソート(交換法) 隣り合った値の順序をチェック 逆順ならば交換 一度実行すると一番小さなデータは端に 二度実行すると二番目に小さなデータが・・ 三度実行すると・・・ N-1回実行すれば確実に並び替わる (実際にはもっと早く並び替わる場合も) 交換法の処理の例 0 1 2 3 4 20 13 33 9 16 20 33 13 16 9 33 20 16 13 9 33 20 16 13 9 33 20 16 13 9 交換法のプログラムの例 並び替えの二重ループ for( int i=0; i<data.length-1; i++ ) { for( int j=0; j<data.lenth-i-1; j++ ) { if( data[j] < data[j+1] ) { tmp=data[j]; data[j]=data[j+1]; data[j+1]=tmp; } } } 交換の方法(失敗例) x y 100 50 x = y; x y 50 50 交換の時に変数が必要な理由 x y 100 x tmp y 100 x tmp 50 y 50 x 100 tmp 50 y 50 tmp = x; 50 100 tmp 100 x = y; 100 y = tmp; メソッドの呼び出し public class SumValue { public static void main( String[] args ){ int[] sample = { 32, 44, 28 }; int sum = sumValue( sample ); } public static int sumValue( int[] data ) { : return s; 他のクラスからも可能 public class SeisekiShori { public static void main( String[] args ) { int[] sample = { 10, 25, 4, 88, 39 }; int sum = SumValue.sumValue(sample); : } } *クラス名+ . +メソッド名 java.lang.Mathクラス いつでも利用可能な数学の関数 double d = Math.random(); *Mathクラスに定義された staticなメソッドを 呼び出している! 基本データ型(primitive type) 基本データ型は予約語 byte, short, char, int, long, float, double, boolean, void 単純なデータ(裸のデータ) 種類は上記の9種のみ (void はメソッドのみに使用) 参照データ型 内部に構造を持つデータ クラスと配列 無限に定義が可能(予約語ではない) クラスライブラリとして提供 String, Math など プログラマが新しく定義 Javaではすべてのプログラムがクラス ラッパクラス 基本データ型をクラスとして取り扱う Byte, Short, Character, Integer, Long Float, Double, Boolean, Void 便利なメソッドを提供 int x = Integer.parseInt( “10000” ); System.out.println( Integer.toOctalString( x ) ); コマンドライン引数 public class ArgTest1 { public static void main(String[] args) { System.out.println( args[0] ); System.out.println( args[1] ); } } java ArgTest1 Wakkanai Hokusei
© Copyright 2024 ExpyDoc