2012-09-13 5 views
-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 []에서 발생하는 시간 수를 계산하는 것입니다. 잘 작동하는 곳에서 모든 반복을 시도하더라도 필요한 결과를 얻을 수 없습니다. 프로그래밍에 초보적인 사람입니다. 여기서 도움이 필요합니다. 감사합니다!문자열 일치 시퀀스 배열

+0

System.out에 문을 당신이 말할 – user1669214

+0

debugginn 목적 "횟수는 순서가 발생"입니다 , 'x', 'b'의 순서가'c'의 순서 일 때만 의미합니까,'c '에 배열't'의 멤버가있을 때를 의미합니까? – NominSim

+0

두 구성원 모두 같은 순서로 c에 나타날 때 – user1669214

답변

0

당신은이 코드 조각을해야합니다

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

를 내부 루프에서.

+0

하지만 내 모체 배열에 t의 여러 시퀀스가있을 때 코드의 동일한 부분이 내 카운트 변수를 증가시킬 것입니다 ... 둘 다의 크기를 늘릴 때와 같이 – user1669214

+0

같은 C = {a, b, x, v, b, n, m, g, a, b, n); 그리고 t = {a, b} – user1669214

0

문제는 x == t.length 검사가 당신의 내면 for 루프 내에서이지만, 내면의 for 루프 xt.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); 
} 
+0

하지만 이걸 보면 잘못된 결과가 나타납니다. 나는 1로 셀 수는 있지만 논리적으로 0 일 것입니다. 왜냐하면 t 멤버는 같은 순서로 c에 나타나지 않고 멤버 중 하나가 누락되어 있기 때문입니다. – user1669214

+0

@ user1669214 게시 된 코드가 작동하고 있습니다. 내가 실행하면 0이되고't = { 'x', 'c'}'로 실행하면 1이됩니다. ** 편집 : ** 'x', 'c' 'c '의 끝에서't = {'x ','c '}'와 함께 2를 얻습니다. 그래서 이것은 또한 작동합니다. – Brian

0

당신은 루프를 두를 필요가 없습니다 : 모든 c ELEM에 루프 필요가 없습니다

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); 
} 
0

(마지막 가능한 일치의 위치에 중지 할 수 있습니다). 당신은 당신이 다음 c ELEM 계속해야 경기를 발견하는 즉시 내부 루프에서 : 코드 사이에서

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); 

    }