使用静态类作为对象数组

时间:2016-09-18 04:43:27

标签: java arrays object nullpointerexception

我是一名计算机科学专业的学生,​​按照以下说明从事作业:

“开发一个应用程序,它将读取输入文本字符串并计算A,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;
    }

  }

}

由于此类是静态的,是否需要构造函数?当我想在LetterList类的Letter []数组中添加元素时,正确的方法是什么?单独使用我的LetterList类会更好吗?我提前感谢任何帮助和感谢。

1 个答案:

答案 0 :(得分:0)

  

由于这个类是静态的,是否需要构造函数?

不,它是可选的,但构造函数不是初始化静态字段的最佳位置,所以在这种情况下你应该把它留下来。如果那是我,我也会遵循@ 3kings的建议,因为当声明中的列表被实例化时,我发现它更具可读性。对于构造函数,一个更好的选择(尽管可能稍微高级)是一个不执行任何操作的私有构造函数。如果有人某天试图实现类(new),这将会发现,这将是一个错误(或至少是徒劳的)。

  

当我想在LetterList中的Letter []数组中添加元素时   上课,有什么方法?

你应该做什么,虽然可能需要一些思考来说服自己。我可能会把它带到for循环之外并通过if (! added)保护它(以避免在那里插入一个字母)并将其添加到索引size(这应该是第一个可用的插槽)。还要注意溢出:如果size已经MAX,则阵列中不再有空间。

  

单独使用我的LetterList类会更好吗?

我在想同样的事。这是一个品味问题,但我并没有真正意识到将它放在Letter课程中。

你走在正确的轨道上,你提出了很好的问题。