-1
public class sequence {
    public static void main(String args[]){
        char[] c = {'a','x','c','e'};
        char[] t = {'x','b'};
        int count = 0,j;

        for(int i=0;i<(c.length);i++)
        {
            int p = i;
            int x = 0;
            for( j=0;j<(t.length);j++){
                if(c[p]!=c[j]){
                    break;
                }
                else
                x++;

                System.out.print(x);
                if(x==((t.length))){
                    count++;
                }
                p++;
            }
            System.out.print('a');

        }


        System.out.println("Number of Occurences " + count);
    }

}

私の仕事は、シーケンス、つまり t[] がマザー配列 c[] で発生する回数を数えることです。頭の中ですべての繰り返しを試しても、必要な結果を得ることができません。私はプログラミングの初心者なので、ここで助けが必要です。ありがとう!

4

4 に答える 4

0

すべての要素をループする必要はありませんc(最後の可能な一致の位置で停止できます)。一致するものが見つかるとすぐに内側のループで、次の要素に進む必要がありcます。

public static void main(String[] args) {
        char[] c = {'c','a','x','b'};
        char[] t = {'x','b'};
        int count = 0, j;

        for(int i=0;i<=(c.length-t.length);i++)
        {
            for(j=0;j<(t.length);j++){
                if(t[j]!=c[i+j]){
                    break;
                }
            }
            if(j==t.length)
                count++;    
        }
        System.out.println("Number of Occurences " + count);

    }
于 2012-09-13T18:59:21.500 に答える
0

次のコードを使用する必要があります。

if(x==((t.length))){
    count++;
}

内側のループから。

于 2012-09-13T16:32:24.510 に答える
0

問題は、x == t.lengthチェックが内側のforループ内にあることですが、内側のforループが決してx到達させないことt.lengthです。また、x変数は冗長であり、常に等しいjため、削除できます。

これを修正するには、長さチェックをループの外側に移動します。

編集:breakまた、内側のループ(ステートメントがある場所)で間違った配列にアクセスしています。

public static void main(String args[]){
    char[] c = {'a','x','c','e'};
    char[] t = {'x','b'};
    int count = 0, j;

    for (int i = 0; i < (c.length); i++) {
        int p = i;
        for (j = 0; j < (t.length); j++){
            if (c[p] != t[j]) {
                break;
            }
            p++;
        }
        if (j == t.length){
            count++;
        }
    }

    System.out.println("Number of Occurences " + count);
}
于 2012-09-13T16:33:27.623 に答える
0

2 つの for ループは必要ありません。

public static void main(String args[]){
    char[] c = {'a','x','b','c','x','b','e'};
    char[] t = {'x','b'};
    int count = 0;

    int tInd = 0;
    for(int i=0;i<(c.length);i++)
    {
        if(tInd < t.length && t[tInd] == c[i]){ // Found a member of t[]
            tInd ++;
        } else {
            tInd = 0; // Didn't find t[]
        }
        if(tInd == t.length){ // Found full t[] sequence
            count++;
            tInd = 0;
        }
    }
    System.out.println("Number of Occurences " + count);
}
于 2012-09-13T16:46:12.603 に答える