単純前方探索

英和辞典を作る

コンピュータに英単語と訳語を覚えさせておいて、調べたい英単語を入力して対応する訳語が表示されるようにしておくと、コンピュータを英和辞典として使うことができます。

ここではたくさんのデータを記憶させるために一番基本的な「配列」を使います。

英単語の配列

String[] words = { "blue", "green", "red", "white", "yellow" };

これで次のような対応が付けられます

words[0]words[1]words[2]words[3] words[4]
bluegreenredwhiteyellow

この配列の要素数は words.length で調べることができます。0〜4 なら 5 です。

訳語の配列

String[] imi = { "青", "緑", "赤", "白", "黄" };

これで次のような対応が付けられます

imi[0]imi[1]imi[2]imi[3] imi[4]

red⇨赤を調べるには

1. wordsの配列の中から調べたい英単語を見つけ出す。⇨2番にあります。

2. imiの2番を取り出して表示する。⇨赤が表示されます。

単純前方探索による単語の探索

wordsの配列の中から調べたい英単語を見つけ出す方法はいくつかあります。 コンピュータにその方法を教えるには、手順を細かく指示する必要があります。この手順をアルゴリズムといいます。

配列の中から調べたい英単語を見つけ出す方法で一番簡単なのは単純前方探索です。

配列の中から英単語をひとつずつ取り出しては、探しているものと同じか調べていくというアルゴリズムです。

そのプログラムです。

ファイル名 Jiten01.java

public class Jiten01 { 
    public static void main( String[] args ) {
        String[] words = { "blue", "green", "red", "white", "yellow" };
        String[] imi   = { "青", "緑", "赤", "白", "黄" };
        String s;
        s = javax.swing.JOptionPane.showInputDialog("検索する英単語を入れてください");
        for ( int i=0 ; words.length>i ; i++ ){
            if ( s.equals(words[i]) ){
                System.out.println( words[i]+" : "+imi[i] );
                break;
            }
        }//forの終わり
    }//mainの終わり 
}//classの終わり

コンパイルと実行は次のようにします。

$ javac Jiten01.java
$ java Jiten01  (ダイアログがでます。redと入力したとすると)
red : 赤
$ 
for ( int i=0 ; words.length>i ; i++ )
配列wordsのデータ全部について繰り返すという意味です
break;
forの繰り返しを中断し、次の命令に進みます。今回は次の命令がないので終了になります。
.equals(words[i])
sという文字列と、words[i]という文字列が等しいかを調べます。
文字列1.equals(文字列2) です。文字列2.equals(文字列1) でも同じです。

単語が見つからない時を考慮した改良

単語が見つからない時に「見つかりません」と報告するようにしてみます

ファイル名 Jiten02.java

public class Jiten02 { 
    public static void main( String[] args ) {
        String[] words = { "blue", "green", "red", "white", "yellow" };
        String[] imi   = { "青", "緑", "赤", "白", "黄" };
        String s;
        s = javax.swing.JOptionPane.showInputDialog("検索する英単語を入れてください");
        boolean atta=false;
        for ( int i=0 ; words.length>i ; i++ ){
            if ( s.equals(words[i]) ){
                System.out.println( words[i]+" : "+imi[i] );
                atta=true;
                break;
            }
        }//forの終わり
        if ( atta==false ) System.out.println( s + " は見つかりません" );
    }//mainの終わり 
}//classの終わり

コンパイルと実行は次のようにします。

$ javac Jiten02.java
$ java Jiten02  (ダイアログがでます。blackと入力したとすると)
black は見つかりません
$ 

boolean はintと同様に変数の型で、trueとfalseのどちらかの値しかとらない変数です。

ifのあとにさせる命令が1つだけの時は { } を省略できます。