-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

您不需要两个 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 回答