Java – ITのキーテクノロジ

第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