2013-11-01 38 views
0

之間傳輸的Java int []數組在此上停頓了一段時間。我有folllowing兩種方法:(只顯示相關代碼)未在方法

public static int[] buildBoyerMooreCharTable(String pattern) { 
    int[] map = new int[Character.MAX_VALUE + 1]; 
    char[] ca = pattern.toCharArray(); 

    for (int i = 0; i < map.length; i++) 
    { 
      for (int k = 0; k < ca.length; k++) 
      { 
       if (Character.getNumericValue(ca[k]) == i) 
       { 
        //System.out.println("YO"); 
        map[i] = findMax(1, pattern.length() - pattern.lastIndexOf(ca[k]) - 1); 
       } 
      } 
    } 
    for (int j =0 ; j < ca.length; j++) 
    { System.out.println(map[Character.getNumericValue(ca[j])]);} 
    System.out.println("Gut check " + map[Character.getNumericValue('a')]); 

    return map; 
} 

方法2

public static List<Integer> boyerMoore(String pattern, String text) { 
    int i = pattern.length() - 1; 
    int j = pattern.length() - 1; 
    int k = 0; 
    boolean yo = false; 
    ArrayList<Integer> ans = new ArrayList<Integer>(); 
    int[] last_table = buildBoyerMooreCharTable(pattern); 

    System.out.println("Did it transfer " + last_table[Character.getNumericValue('b')]); 
... 

的問題是,我相信,在我行:

 int[] last_table = buildBoyerMooreCharTable(pattern); 

的表沒有正確傳輸!在我的顯示窗口中,我收到以下內容:

Gut check 3 
Gut check 0 
Did it transfer 0 

腸道檢查3是正確的!其餘的......不。

這是它被稱爲

StringSearch ss = new StringSearch(); 
String yay = "abcdabcdabce"; 
StringSearch.buildBoyerMooreCharTable(yay); 
List<Integer> a_i = new ArrayList<Integer>(); 
a_i = StringSearch.boyerMoore("d", yay); 

所以......當方法boyerMoore實際上是所謂的...我們得到一個失敗的價值。

避開所有我發佈的代碼 - 我覺得有可能是不理解如何設置陣列彼此相等回事的事...

+2

你在做什麼看起來不錯。然而,你將'map [Character.getNumericValue('a')]'映射到'map [Character.getNumericValue('b')]' - 那會是問題嗎? – iluxa

+0

你期望'Character#getNumericValue()'返回什麼? –

+0

顯示您的println語句的結果。 –

回答

1

要調用Character.getNumericValue(焦炭),但這似乎不是一個好的選擇。對於該函數的範圍,返回值爲-1,其值大於1000。 Character.getNumericValue('?')是-1。

我懷疑你想使用的ASCII值是什麼值已經是,所以你不需要調用任何函數來做到這一點。

if (Character.getNumericValue(ca[k]) == i) 

應該只是

if (ca[k] == i) 

搜索每一個可能的字符非常低效給你只知道一個極限集將在每次出現。我建議你只搜索實際存在的角色。


爲了您的利益下面的代碼打印amoungst其他事情

for (int i = 0; i <= Character.MAX_VALUE; i++) { 
    int value = Character.getNumericValue(i); 
    if (value >= 0) 
     System.out.println((char) i + " is " + value); 
} 

對於羅馬數字字符

ⅰ is 1 
ⅱ is 2 
ⅲ is 3 
ⅳ is 4 
ⅴ is 5 
ⅵ is 6 
ⅶ is 7 
ⅷ is 8 
ⅸ is 9 
ⅹ is 10 
ⅺ is 11 
ⅻ is 12 
ⅼ is 50 
ⅽ is 100 
ⅾ is 500 
ⅿ is 1000