↓↓クリックして頂けると励みになります。
【24 | クラス分割】 << 【ホーム】 >> 【26 | Frameの応用】
前のセクションで学んだクラス分割を応用して、簡単な検索プログラムを作成します。
Visual Studio Codeで以下の3つのプログラム「Person.java」「AddressBook.java」「SearchTest.java」を作成します。
新規作成1 【Person.java】
public class Person { public String name; public String address; public Person( String s1, String s2 ) { name = s1; address = s2; } }
新規作成2 【AddressBook.java】
public class AddressBook { private Person[] data; public AddressBook() { data = sample; } public AddressBook( Person[] data ) { this.data = data; } public void setData( Person[] data ) { this.data = data; } public Person[] getData() { return data; } private static Person[] sample = { new Person( "山田太郎", "北海道" ), new Person( "鈴木次郎", "青森" ), new Person( "木村三郎", "東京" ), new Person( "高橋四郎", "広島" ), new Person( "佐藤五郎", "福岡" ), }; }
新規作成3 【SearchTest.java】
public class SearchTest { public static void main( String[] args ) { AddressBook book = new AddressBook(); String[] result = searchStartsWith( book.getData(), "木" ); printData( result ); } public static String[] searchStartsWith( Person[] data, String head ) { int count=0; for( int i=0; i<data.length; i++ ) { if( data[i].name.startsWith( head ) ) { count++; } } String[] result = new String[count]; for( int i=0,j=0; i<data.length; i++ ) { if( data[i].name.startsWith( head ) ) { result[j++]=data[i].name + ":" + data[i].address; } } return result; } public static void printData( String[] data ) { for( int i=0; i<data.length; i++ ) { System.out.println( data[i] ); } } }
最初に”木”がついている人の名前データを表示するプログラムです。
「Person.java」はフィールドに値を代入するコンストラクタがあるクラスです。
「AddressBook.java」にはpersonクラスのインスタンス配列sampleがあります。
this.data = data;
は、次のコンストラクタのdata = sample;
の部分を指します。
thisはこのような使い方もできます。
public AddressBook() {
data = sample;
}
次のメソッドは、単にdataインスタンス配列を返すメソッドです。
public Person[] getData() { return data; }
「SearchTest.java」を見てみましょう。
for( int i=0; i<data.length; i++ ) { if( data[i].name.startsWith( head ) ) { count++; } }
もしnameの最初の文字が”木”ならcountをインクリメントします。
このcountは結果を残す配列result[]
のメモリを確保するときに使います。
出力結果です。
「Person.java」「AddressBook.java」「SearchTest.java」の3つをコンパイルして、「SearchTest.java」を実行します。
~/Desktop/Programming/JP $ javac Person.java ~/Desktop/Programming/JP $ javac AddressBook.java ~/Desktop/Programming/JP $ javac SearchTest.java ~/Desktop/Programming/JP $ java SearchTest 木村三郎:東京
Visual Studio Codeで以下のプログラム「SearchTest2.java」を作成します。
新規作成 【SearchTest2.java】
public class SearchTest2 { public static void main( String[] args ) { AddressBook book = new AddressBook(); String[] result = searchChar( book.getData(), '木' ); printData( result ); } public static String[] searchChar( Person[] data, char c ) { int count=0; for( int i=0; i<data.length; i++ ) { String line = data[i].name + data[i].address; if( line.indexOf( c ) != -1 ) { count++; } } String[] result = new String[count]; for( int i=0,j=0; i<data.length; i++ ) { String line = data[i].name + ";" + data[i].address; if( line.indexOf( c ) != -1 ) { result[j++] = line; } } return result; } public static void printData( String[] data ) { for( int i=0; i<data.length; i++ ) { System.out.println( data[i] ); } } }
名前のどこかにに”木”がついている人のデータを表示するプログラムです。
indexOf(c)
はjavaのパッケージに含まれるメソッドで、与えられたインスタンスの中に指定された文字が(今回はc)入っていたら0(true)を返します。
それ以外は-1(false)を返します。
trueを数字で表すと0、falseを数字で表すと-1です。
実行結果です。
~/Desktop/Programming/JP $ javac SearchTest2.java ~/Desktop/Programming/JP $ java SearchTest2 鈴木次郎;青森 木村三郎;東京
【24 | クラス分割】 << 【ホーム】 >> 【26 | Frameの応用】
↓↓クリックして頂けると励みになります。