2014-05-18 12 views
-5

我想將關鍵字放入字符串緩衝區alpha並忽略重複字符。我在關鍵字到alpha比較中遇到了越界錯誤。關鍵字到alpha比較的出界錯誤

public String putKeyword(String keyword) 
{ 
    StringBuffer alpha = new StringBuffer(); 

    alpha.append(keyword.charAt(0)); 
    for(int i = 1; i < keyword.length(); i++){ 
     boolean found = false; 
     for(int j = 0; j < i; j++){ 
      if(keyword.charAt(i) == alpha.charAt(j)) 
       found = true; 
      if(found = false) 
       alpha.append(keyword.charAt(i)); 
     } 

    } 
    return alphabet = alpha.toString(); 
} 
+0

好像你忘記了主要語言的標籤在這裏。我假設這是Java。 –

+0

我已將它添加到您問題的標籤中,無需將其添加到標題中。 ';)' –

回答

1

嘗試:

public String putKeyword(String keyword) 
{ 
    StringBuffer alpha = new StringBuffer(); 

    alpha.append(keyword.charAt(0)); 
    for(int i = 1; i < keyword.length(); i++){ 
     boolean found = false; 
     for(int j = 0; j < alpha.length(); j++){ 
      if(keyword.charAt(i) == alpha.charAt(j)) 
       found = true; 
     } 
     if(found == false) 
      alpha.append(keyword.charAt(i)); 
    } 
    return alphabet = alpha.toString(); 
} 

分享和享受。

+0

'if(found = false)'可以簡化爲'if(!found)' – Rahul

+1

您發佈的代碼甚至無法編譯'if(found = false)'的原因。此外,我沒有看到您的發佈代碼和OP的發佈代碼之間有任何區別。 – Rahul

+0

@Rahul:添加缺少等號。至於「有什麼不同」 - 不同之處在於'if(found == false)alpha.append(keyword.charAt(i));'被從'j'的循環中取出,以便檢查所有字符在追加到目標StringBuffer之前進行復制。 –

2

想象一下這樣的情況:

keyword = "aaaaa"'

讓我們通過你的算法迭代:

alpha = "a" 

採取通知什麼alpha

i=1, j=0 

keyword.charAt的內容(1 )== alpha.charAt(0)
一個==一個
阿爾法= 「一個」

i=2, j=0 

keyword.charAt(2)== alpha.charAt(0)
一個==一個
阿爾法= 「一個」

i=2, j=1 

由於alpha只有1個字符,因爲您試圖訪問第2個元素而引發異常。

解決方案:使用HashSet保持看到狀態。

public String putKeyword(String keyword) { 
    StringBuffer alpha = new StringBuffer(); 
    Set<Character> seenChars = new HashSet<String>(); 

    for (int i = 0; i < keyword.length(); i++) { 
     char c = keyword.charAt(i); 

     if (!seenChars.contains(c)) { 
      seenChars.add(c); 
      alpha.append(c); 
     } 
    } 

    return alpha.toString(); 
} 
+0

這是一個很好的解釋,但你可以編輯帖子。將會+1,如果你這樣做。 – Rahul

+0

完成:)我格式化了文本並使用'Set'添加了一個解決方案。 – Lopina

+0

然後在店裏爲你+1。 – Rahul

0

當心,數組索引從零開始,但你的第一個for循環開始望着1,而在0第二啓動時,它看起來不像是循環的意向。

+0

我相信OP的部分代碼是正確的。如果您注意到,關鍵字(0)處的元素首先被添加到目標StringBuffer('alpha.append(keyword.charAt(0));') - 然後代碼從1開始循環'i',因爲第0個元素已被複制。 –