2014-09-12 84 views
1

我應該比較一個arraylist(字符串)中的字符,然後如果所有的字符串都有共同的字符或字符或沒有共同的字符,我必須顯示常見的數量一個數組列表中所有字符串中的字符。 這裏是我的功能:比較一個數組中的字符串元素造成indexoutofboundsexception

public void theElementor(ArrayList<String> x) { 
    char a; 
    ArrayList<String> store = new ArrayList<String>(); 
    for (int i = 0; i <= x.size(); i++) { 
     for (int j = x.size()-1; j > i; j--) { 
       for (int l = 0; l < x.get(j).length(); l++) { \\error here 
        if (x.get(i).contains(
          Character.toString(x.get(j).charAt(l)))) { 
         a = x.get(j).charAt(l); 
        store.add(Character.toString(a)); 
        } 

      } 
     } 
    } 
    for (String element : store) { 
     System.out.println(element); 
    } 
} 

我想通了很多,我不再讓早些時候,我得到的錯誤,但依然沒能得到char或字符常見的所有字符串我輸入。

+0

如果'詮釋J = x.size()''然後x.get(J)'將產生錯誤。您需要從size - 1開始。 – 2014-09-12 21:57:32

+0

這一行有點奇怪:'x.remove(j).charAt(l);'。你爲什麼在你剛刪除的條目上做'charAt',然後不使用這個值? – 2014-09-12 22:00:48

+0

@HotLicks我剛剛試過它,現在我得到同樣的錯誤,當第三次循環運行,如果語句成立。 – 2014-09-12 22:02:13

回答

0

嘗試這樣的模式:

  • 店集中的所有字符
  • 疊代是共同的所有字符串設置和打印字符

樣本代碼(如果我明白你正確)

public static void main(String[] args) { 
    List<String> x = new ArrayList<String>(); 
    x.add("abcdef"); 
    x.add("bcdefg"); 
    x.add("bbccff"); 

    Set<Character> all = new HashSet<Character>(); 
    for (String s : x) { 
     for (int i = 0; i < s.length(); i++) { 
      all.add(s.charAt(i)); 
     } 
    } 

    for (Character c : all) { 
     if (charIsCommon(c, x)) { 
      System.out.println(c); 
     } 
    } 
} 

/* 
* return true only if each string in [list] contains character [c] 
*/ 
private static boolean charIsCommon(char c, List<String> list) { 
    for (String s : list) { 
     if (s.indexOf(c) < 0) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

我應該可以輸入自己的字符串,它們也可以是可變長度的。 – 2014-09-12 22:32:39

+0

謝謝!這工作得很好,但你能闡述你做了什麼?我不完全能夠理解這是如何工作的。 – 2014-09-13 00:37:56

+1

首先,它讀取所有字符串中的所有字符,並添加**每個**字符進行設置。在此之後,我們的集合存儲了7個元素{a,b,c,d,e,f,g} - 嘗試:'System.out.println(all)'。其次,我們迭代我們的集合(c是集合中的當前元素),並檢查是否存在於x ArrayList中的** each **字符串中。要做到這一點,我們有izolated方法 - charIsCommon(c,x)。此方法迭代通過列表中的所有字符串作爲參數傳遞並返回true,如果且僅當所有字符串都包含該char時。請參閱String.indexOf方法。 – 2014-09-13 21:11:10

1

在Java中,列表的有效索引範圍是0size() - 1而不是size()。錯誤的原因是您的ijfor循環。更改

for (int i = 0; i <= x.size(); i++) { 
    for (int j = x.size(); j > i; j--) { 

for (int i = 0; i < x.size(); i++) {   // <= becomes < 
    for (int j = x.size() - 1; j > i; j--) { // x.size() becomes x.size() - 1 
+0

他故意向後索引,所以他可以執行「刪除」操作。你的計劃會打破這一點。 – 2014-09-12 21:58:19

+0

試過了,現在我在if語句成立時得到同樣的錯誤。 – 2014-09-12 21:59:36

+0

@HotLicks我的更正如何停止向後索引? ''j'' for'循環仍然從最後開始; 「j」的初始值被修正爲「x.size() - 1」。 – rgettman 2014-09-12 22:01:40

相關問題