2016-09-18 50 views
0

我是一名計算機專業的學生處理作業以下指示的數組:使用靜態類作爲對象

「發展,將讀取輸入的文本字符串並計算A的數量的應用程序, B的,C的等......你將創建一個Letter類,它將保存出現的字母和數量,以及一個LetterList類,它可以是靜態的Letter對象數組。

我無法準確計算出如何使用我的靜態類包含字母對象的數組。我有我的班寫如下:

public class Letter { 

    private char letter; 
    private int count; 

    //constructor and getters and setters omitted 

    public void increment() { 
     count++; 
    } 

    static class LetterList { 

    private static final int MAX = 26; 
    private static Letter[] list; 
    private static int size = 0; //to prevent null pointer exception 

    public LetterList() { 
     list = new Letter[MAX]; 
    } 

    public static int length() { 
     return size; 
    } 

    public static void addLetter(Letter letter) { 
     boolean added = false; 
     for (int i = 0; i < MAX && !added; i++) { 
      if (list[i] != null) { 
       //if the letter exists in the array increment the count 
       if (letter.getLetter() == list[i].getLetter()) { 
        list[i].increment(); 
        added = true; 
       } 
      } else { 
       //if it doesn't exist add it 
       list[i] = letter; 
       added = true; 
       size++; 
      } 
     } 
    } 

    public static Letter getElement(int idx) { 
     return list[idx]; 
    } 

    public static void clearList() { 
     size = 0; 
    } 

    } 

} 

因爲這個類是靜態的,是構造函數所需?當我想在我的LetterList類的Letter []數組中添加元素時,什麼是正確的方法?讓我的LetterList類本身更好嗎?我感謝任何幫助和提前感謝。

+0

我不相信你會想要在這種情況下的構造函數...只是在頂部做私人靜態信[]列表=新信[MAX];'。因此它是真正的靜態的,因爲爲了讓你的代碼現在能夠正常工作,你需要調用構造函數。如果你想給你的'Letter []'添加一個字母,只需要做...'LetterList.addLetter(....);'。在我看來,你應該把這兩門課分開。 – 3kings

+0

靜態類不需要構造函數。我認爲'Map '將比數組更好地滿足您的需求。 – c0der

+0

在這個級別上,我會發現遵循教授的建議是明智的,在這種情況下,一個靜態的'Letter'對象(對於生產代碼我也會做其他事情,但現在不用)。 –

回答

0

因爲此類是靜態的,需要構造?

不,它是可選的,但構造函數並不是初始化靜態字段的最佳位置,所以在這種情況下,您應該忽略它。如果那是我,我也會遵循@ 3kings的建議,因爲當聲明中實例化列表時,我發現它更具可讀性。對於構造函數來說,更好的選擇(雖然可能稍微高級)是一個不執行任何操作的私有構造函數。如果某人有一天試圖讓班級安全(new),這將是錯誤的(或至少是徒勞的)。

當我想添加元素到我的LetterList 類的Letter []數組中時,什麼是正確的方法?

你應該做什麼工作,儘管可能需要一些思考才能說服自己。我可能會把它放在for循環之外,並通過if (! added)(爲了避免插入已經存在的字母)並在索引size(它應該是第一個可用的插槽)上加以保護。另外要注意溢出:如果size已經是MAX,則陣列中不再有空間。

請問我的LetterList類會更好嗎?

我的想法一樣。這是一個品味的問題,但我真的沒有看到它在Letter課程中的一個點。

你在正確的軌道上,你問的問題很好。

+0

非常感謝您花時間回答我的問題並提供建議。我將執行您提出的更改並提交我的任務。祝你有美好的一天。 –