2016-09-18 93 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

非常感谢您花时间回答我的问题并提供建议。我将执行您提出的更改并提交我的任务。祝你有美好的一天。 –