2016-03-12 113 views
0

我有一個ArrayList,它以「走路狗」的形式存儲字符串或筆記。我有一個notes類,其中有一個方法可以打印每個字母出現在整個ArrayList中的次數。我應該聲明和使用大小爲26的整數的原始數組,並使用String類中的charAt方法將筆記本中的每個字母轉換爲char。然後我必須使用該char來索引到低級數組中的適當位置。這是迄今爲止我的方法,但它尚未完成:計算字母表中每個字母出現在ArrayList的一系列字符串中的次數

public void printLetterDistribution() { 
     ArrayList<Integer> aList = new ArrayList<Integer>(); 
     for (int i = 0; i < notes.size(); i++) { 
      String note = notes.get(i); 
      for (int j = 0; j < note.length(); j++) { 
       char letter = note.charAt(j); 
       int code = (int)letter; 
       aList.add(code); 
      } 
     } 
     Collections.sort(aList); 

    } 

我碰到一堵牆,我不知道如何繼續。正如你所看到的,我試圖將這些字母轉換成他們的字符代碼,但它可能不是最好的方式來做到這一點,我仍然陷入困境。任何人都可以幫忙嗎?

編輯 - 這裏是整個票據類:

public class Notebook { 
    private ArrayList<String> notes; 

    public Notebook() { notes = new ArrayList<String>(); } 

    public void addNoteToEnd(String inputnote) { 
     notes.add(inputnote); 
    } 

    public void addNoteToFront(String inputnote) { 
     notes.add(0, inputnote); 
    } 

    public void printAllNotes() { 
     for (int i = 0; i < notes.size(); i++) { 
      System.out.print("#" + (i + 1) + " "); 
      System.out.println(notes.get(i)); 
     } 
     System.out.println(); 
    } 

    public void replaceNote(int inputindex, String inputstring) { 
     int index = inputindex - 1; 
     if (index > notes.size() || index < 0) { 
      System.out.println("ERROR: Note number not found!"); 
     } else { 
      notes.set(index, inputstring); 
     } 
    } 

    public int countNotesLongerThan(int length) { 
     int count = 0; 
     for (int i = 0; i < notes.size(); i++) { 
      String temp = notes.get(i); 
      if (temp.length() > length) { 
       count++; 
      } 
     } 
     return count; 
    } 

    public double averageNoteLength() { 
     int sum = 0; 
     for (int i = 0; i < notes.size(); i++) { 
      String temp = notes.get(i); 
      int length = temp.length(); 
      sum += length; 
     } 
     double average = (double)(sum/notes.size()); 
     return average; 
    } 

    public String firstAlphabetically() { 
     String min = ""; 
     for (int i = 0; i < notes.size(); i++) { 
      for (int j = i + 1; j < notes.size(); j++) { 
       if ((notes.get(i)).compareTo(notes.get(j)) < 0) { 
        min = notes.get(i); 
       } else { 
        min = notes.get(j); 
       } 
      } 
     } 
     return min; 
    } 

    public void removeNotesBetween(int startnote, int endnote) { 
     int start = startnote - 1; 
     int end = endnote - 1; 
     for (int i = end - 1; i > start; i--) { 
      notes.remove(i); 
     } 
    } 

    public void printNotesContaining(String findString) { 
     for (int i = 0; i < notes.size(); i++) { 
      if (notes.get(i).contains(findString)) { 
       System.out.println("#" + i + " " + notes.get(i)); 
      } 
     } 
    } 

    public int countNumberOf(String letter) { 
     int count = 0; 
     for (int i = 0; i < notes.size(); i++) { 
      String note = (notes.get(i)); 
      for (int j = 0; j < note.length(); j++) { 
       if (note.charAt(j) == letter.charAt(0)) { 
        count++; 
       } 
      } 

     } 
     return count; 
    } 

    public void findAndReplaceFirst(String old, String newWord) { 
     for (int i = 0; i < notes.size(); i++) { 
      String note = notes.get(i); 
      if (note.contains(old)) { 
       int loc = note.indexOf(old); 
       int len = old.length(); 
       String temp = note.substring(0, loc) + note.substring(loc + len, note.length()); 
       String newString = temp.substring(0, loc) + newWord + temp.substring(loc, temp.length()); 
       notes.set(i, newString); 
      } else { 
       String newString = note; 
       notes.set(i, newString); 
      } 
     } 
    } 

    public void printLetterDistribution() { 
     int[] p = new int[26]; 
     for (int i = 0; i < 26; i++) { 
      p[i] = 0; 
     } 
     for (int i = 0; i < notes.size(); i++) { 
      String note = notes.get(i); 
      note = note.toLowerCase(); 
      for (int j = 0; j < note.length(); j++) { 
       char letter = note.charAt(j); 
       p[letter - 'a']++; 
      } 
     } 
     System.out.println(p); 
    } 

} 
+1

在附註上,最好使用增強型for循環來遍歷ArrayList。它的語法如下所示:'for(String note:notes){//元素註釋的邏輯出現在這裏}' – Michael

+1

@MickMnemonic這不是因爲它要求該方法的格式不同,而是要求計算每個字母的每個實例即a出現6次,b 4次等等。 – ch1maera

+0

@ ch1maera,這是功課嗎?你在一個小時內詢問的最後四個問題幾乎都是關於同樣的問題。該網站不打算用作代碼寫入服務。 –

回答

1

可以使用26長度的int數組並遞增索引字母-'A'的計數;

int[] p = new int[26]; 
for(int i = 0; i < 26; i++) p[i] = 0; 
for (int i = 0; i < notes.size(); i++) { 
     String note = notes.get(i); 
     for (int j = 0; j < note.length(); j++) { 
      char letter = note.charAt(j); 
      if(letter>= 'a' && letter <= 'z') 
       p[letter-'a']++; 

} 

PS:我假設筆記只是小寫。如果不是這種情況,請使用note.toLowerCase()來降低它們。

由於在筆記中可以有空格,我已經更新了代碼。

+0

你將不得不包括'note.toLowerCase()'第一 – Maljam

+0

我試過了,但我得到了第二個for循環的越界異常。 – ch1maera

+0

所有的字符只是小寫字母嗎? –

相關問題