2016-09-18 3 views
0

Я компьютерные науки студент работает на уступках со следующими инструкциями:Использование статического класса как массив объектов

«Разработка приложения, которое будет считывать входные текстовую строку и подсчет количества элементов а, B, C и т. Д. ... вы создадите класс Letter, который будет содержать букву и число вхождений и класс LetterList, который может быть статическим массивом объектов Letter. "

У меня возникли проблемы с выяснением, как использовать мой статический класс, содержащий массив объектов 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; 
    } 

    } 

} 

Поскольку этот класс является статическим, требуется конструктор? Когда я хочу добавить элементы в мой массив Letter [] в моем классе LetterList, что это правильный способ? Было бы лучше иметь мой класс LetterList самостоятельно? Я ценю любую помощь и благодарю заранее.

+0

Я не верю, что вам понадобится конструктор в этом случае ... просто наверху 'private static Letter [] list = new Letter [MAX];'. Поэтому он действительно статичен, потому что для того, чтобы ваш код работал прямо сейчас, вам нужно будет вызвать конструктор. Если вы хотите добавить письмо в свой 'Letter []' просто do ... 'LetterList.addLetter (....);'. На мой взгляд, вы должны отделить эти два класса. – 3kings

+0

Статический класс не требует конструктора. Я думаю, что 'Map ' будет служить вашей потребности лучше, чем массив. – c0der

+0

На этом уровне я счел бы разумным следовать рекомендациям профессора, в этом случае статический массив объектов 'Letter' (для производственного кода я тоже буду делать что-то еще, но оставлю это сейчас). –

ответ

0

Поскольку этот класс является статическим, требуется конструктор?

Нет, это необязательно, но конструктор не является лучшим местом для инициализации статических полей, поэтому в этом случае вы должны его оставить. Если бы это был я, я следовал предложению @ 3kings также потому, что считаю его более читаемым, когда список создается в декларации. Для конструктора еще лучший вариант (хотя, возможно, немного продвинутый) - это частный конструктор, который ничего не делает. Это поймает, если кто-то однажды попытается установить класс (с new), что было бы ошибкой (или, по крайней мере, бесполезной).

Когда я хочу добавить элементы в мой массив Letter [] в своем LetterList классе, что это за правильный способ?

Что вы должны делать, хотя может подумать, чтобы убедить себя. Я бы, вероятно, взял его за цикл for и защитил его на if (! added) (чтобы не вставлять уже там письмо) и добавьте его в индекс size (который должен быть первым доступным слотом). Также остерегайтесь переполнения: если size уже MAX, в вашем массиве больше нет места.

Было бы лучше иметь мой класс LetterList самостоятельно?

Я думал то же самое. Это вопрос вкуса, но я действительно не вижу смысла иметь его внутри класса Letter.

Вы на правильном пути, и вы задаете хорошие вопросы.

+0

Большое спасибо за то, что нашли время, чтобы ответить на мой вопрос и предложить совет. Я буду выполнять предложенные вами изменения и представить свое задание. Хорошего дня. –

Смежные вопросы