文字列比較のプログラムの考え方(2)

この課題では2つの文字列で,先頭から3文字分の一致を検査する

文字列の一致状況を表す変数checkを導入
checkは0か1の2つの値しかとらず,1なら一致状態,0なら不一致状態を表す。
2つの文字列ともに3文字以上からできているものとする。

検査を開始する前にcheck=1にしておく。
0号室同士,1号室同士,というように順に,検査を開始して,不一致が見つかったら,check=0にする。
checkを1に戻す手段はないようにしておく。

検査が終了したら,checkの値に従って,"equal" または "not equal" を表示する。


    /*検査*/
    check=1;
    if (mystr1.charAt(0)!=mystr2.charAt(0)) check=0;
    if (mystr1.charAt(1)!=mystr2.charAt(1)) check=0;
    if (mystr1.charAt(2)!=mystr2.charAt(2)) check=0;

このような形は,繰り返し構造になりそうなので同じ形の繰り返しにする。
「   int ptr;  /*検査する文字列配列の要素番号*/ 」を用意する。

    /*検査*/
    check=1;
    ptr=0;
    if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) check=0;
    ptr++;
    if (mystr1.charAt(ptr)!=mystr2.charAt(ptr)) check=0;
    ptr++;
    if (mystr1.charAt(ptr)!=mystr2.charAt(ptr)) check=0;
    ptr++; /*最後のptr++は本来不要だが,形を整えるために書いてある*/

あるいは

    /*検査*/
    check=1;
    ptr=0;
    if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) {
        check=0;
    }
    ptr++;
    if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) {
        check=0;
    }
    ptr++;
    if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) {
        check=0;
    }
    ptr++; /*
最後のptr++は本来不要だが,形を整えるために書いてある*/

繰り返し回数は3回と決まっているのでfor文になる

    /*検査*/
    check=1;
    for (ptr=0; ptr<3; ptr++) {
        if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) check=0;
    }

あるいは

    /*検査*/
    check=1;
    for (ptr=0; ptr<3; ptr++) {
        if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) {
            check=0;
        }
    }

次のようにしておくと,無駄な比較をしないようになる

    /*検査*/
    check=1;
    for (ptr=0; ptr<3; ptr++) {
        if (
mystr1.charAt(ptr)!=mystr2.charAt(ptr)) {
            check=0;
            break; /*いちばん内側繰り返し構造からの脱出*/
        }
    }