根据API / UML,我的代码的结构/顺序是否正确?

这是我必须遵循的API / UML。

根据API / UML,我的代码的结构/顺序是否正确?

这是我的代码。

public class NLP 
{
    private String[] data;

    public NLP()  //or "public NLP(String[] data)"???
    {
    // IF public NLP(String[] data),then
    //this.data = data; ??? 
    ... 
    }
    public int countOccurrences(String word)
    {   
    ...
        return count;   
    }
    public String[] getStems(int len)
    {
        ...return data; //???
    }
    //For testing
    //public static void main(String[] args)
    //{
    //}
}

我不确定我的构造函数是否应该为public NLP(String[] data)public NLP()。如果public NLP(String[] data)应该是我的构造函数,那么有人可以向我解释为什么有两个(String[] data)吗?


这是我完成的代码。随时检查并提供反馈。谢谢。

public class NLP 
{
    private String[] data;


    public NLP(String[] data)
    {
        this.data = data;       
    }

    public int countOccurrences(String word)
    {
        int count = 0;
        for (int i = 0; i < data.length; i++)
        {
            if (word.equals(data[i]))
            {
                count = count + 1;
            }           
        }
        StdOut.println(word + ": " + count);
        return count;
    }

    public String[] getStems(int len)
    {
        for (int i = 0; i < data.length; i++)
        {
            String s = data[i];
            if (len >= data[i].length())
            {
                data[i] = s;
                StdOut.println(data[i]);
            }
            if (len < data[i].length())
            {
                data[i] = s.substring(0,len);
                StdOut.println(data[i]);
            }
        }return data;
    }
}
xiaoliye 回答:根据API / UML,我的代码的结构/顺序是否正确?

在UML类图中,中间部分(在您的情况下为带有“-String [] data”的部分)包含类的字段,而底部部分(具有“ + NLP(String [] data]”))包含类方法,从技术上讲,构造方法是其中的一种。这是我很喜欢的quick reference

这样,看来您的构造函数应该为public NLP(String[] data),并且在其中应该设置this.data = data

,

构造函数应该包含API描述中所示的参数(即public NLP(String[] data)),因此我认为您的实现(如问题下部所述)就可以了。

但是,我认为您的一般问题是关于类的构造函数和内部数据之间的关系:

该类的 data (或状态)保存在一个或多个变量(有时也称为成员字段或 attributes )-在您的情况下为String[] data。面向对象编程的一般概念是使成员保持私密,并且只能通过公共接口方法(例如getter和setter)访问它们。这称为encapsulation

当然也可以定义不带参数的构造函数,但是只能用一些固定值初始化类。在您的情况下,其目的是使用传递给构造函数的参数来初始化内部成员data(碰巧也被命名为data)。

最后,许多编程语言(包括Java)都允许重载构造函数,因此,例如,您可以有一个带参数的构造函数,而另一个不带参数的构造函数。 Here is很有帮助的介绍。

本文链接:https://www.f2er.com/3126402.html

大家都在问