2016-03-15 64 views
-2

所以我有一個數組t和一個數組x。我試圖在數組x的索引5處找到數組t的模式「abc」。我也至今寫了這個代碼,但很失落,爲什麼這是不工作...試圖在Java中的另一個數組中找到一個數組

,我不能同時==在使用任何東西,但而!=我代碼,使其更加棘手。 (否則會使用簡單的for循環)。

任何想法?

public static void main(String[] args){ 


    char t[]={'a','b','c'}; 
    char x[]={'e','a','b','x','c','a','b','c'}; 
    int i=0, j=0, c=0; 
    boolean a = false; 
    while(i != x.length){ 
     if(t[0]!= x[i]){ 
      i++; 
      continue; 
     } 
     else{ 
      j=0; 
      while(j != t.length){ 
       if(t[j]==x[i+j]) 
       c++; j++; 
      } 
     if(c==t.length){ 
     a = true; 
      break; 
     } 
     else{ 
      i=i+c-1;  
      c=0; 
     } 
    } 
    if (a == true) 
    System.out.println("index: "+i); 
    else 
    System.out.println("Match not found"); 

    } 
} 
+1

'布爾了'總是假這裏,對不對? –

+1

除了Akshay的回答中的錯誤之外,還有一個很大的問題,通過將't'的定義更改爲'char t [] = {'a','b','c','d' };看看你運行它會發生什麼。 – ajb

+0

在while循環的幫助下添加if(a == true)。 –

回答

-3
public class Main { 
public static void main(String[] args){ 
    char t[] = {'a', 'b', 'c'}; 
    char x[] = {'e', 'a', 'b', 'x', 'c', 'a', 'b', 'c'}; 

    int count = 0; 
    while(count != x.length){ 
     if(x[count] != 'a'){ 
      count++; 
     }else{ 
      if(x[count + 1] != 'b'){ 
       count++; 
      }else{ 
       if(x[count + 2] != 'c'){ 
        count++; 
       }else{ 
        System.out.println(count); 
        System.exit(0); 
       } 
      } 
     } 
    } 
} 

}

你能做到這一點?這很簡單!

+2

這個想法是幫助OP找出他犯了什麼錯誤,而不是炫耀你可以解決問題是你自己的方式。無論如何,我認爲這個想法是找出一種算法,它適用於任何想要搜索的數組,而不是硬編碼的查找'{'a','b','c'}'的算法。 – ajb

+0

這顯然是一個班級。如果教師接受這個答案,他們應該被解僱。 – ajb

+1

但是OP已經找到了一個更好的算法。 – ajb

0

你正在犯一個很小的錯誤。

你是不是在你的條件設置= TRUE:

if(c==t.length){ 
    break; 
} 

你的代碼更改爲:

if(c==t.length){ 
    a = true; 
    break; 
} 

試試這個,它會工作。

編輯:

你正在做的另外一個錯誤是,你保持while循環中的這個條件:

if (a == true) 
    System.out.println("index: "+i); 
    else 
    System.out.println("Match not found"); 
    } 

將其移出,同時循環和你原來的代碼工作正常。

編輯2: 正如,agb指出,我同意代碼很容易崩潰,因爲缺少檢查和任何輸入參數的變化t和x可能會給ArrayIndexOutOfBound異常。

+0

改變了,哎呀!仍然不起作用...最後應該打印索引5。 – lesterpierson123

+0

什麼是打印? – theLearner

+0

我同意代碼容易崩潰,因爲缺少檢查和任何輸入參數的變化t和x可能會給ArrayIndexOutOfBound異常 – theLearner

1

你的代碼已經2-3問題,

  1. boolean a是從來沒有使用過

  2. 條件檢查是while循環中(等破,情況不會被檢查出來)

  3. 也應該檢查數組的長度x

    char t[] = {'a', 'b', 'c'}; 
    char x[] = {'e', 'a', 'b', 'x', 'c', 'a', 'b', 'c'}; 
    int i = 0, j, c = 0; 
    boolean a = false; 
    while (i != x.length) { 
        if (t[0] != x[i]) { 
         i++; 
        } else { 
         j = 0; 
         while (j != t.length && i+j<x.length) { 
          if (t[j] == x[i + j]) { 
           c++; 
          } 
          j++; 
         } 
         if (c == t.length) { 
          a = true; 
          break; 
         } else { 
          i = i + c - 1; 
          c = 0; 
         } 
        } 
    
    } 
    if (a) { 
        System.out.println("index: " + i); 
    } else { 
        System.out.println("Match not found"); 
    } 
    
相關問題