【问题标题】:Is the structure/order of my code correct according to the API/UML?根据 API/UML,我的代码结构/顺序是否正确?
【发布时间】:2019-11-11 05:22:30
【问题描述】:

这是我必须遵循的 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;
    }
}

【问题讨论】:

    标签: java api constructor uml class-diagram


    【解决方案1】:

    构造函数应该包含参数(即public NLP(String[] data)),如 API 描述中所示,所以在我看来,您的实现(如问题的下部给出)很好。

    但是,我认为你的一般问题是关于你的类的构造函数和内部数据是如何相关的:

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

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

    最后,许多编程语言(包括 Java)允许构造函数的重载,因此您可以使用一个带参数的构造函数和另一个不带参数的构造函数。 Here is 一个有用的介绍。

    【讨论】:

      【解决方案2】:

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

      因此,您的构造函数似乎应该是public NLP(String[] data),并且在其中,您将设置this.data = data

      【讨论】:

      • 哪一部分似乎与图中的描述不符??
      • 啊,对不起。没有注意到...表示方法的实现被省略了。以为他们只是充当这些领域的吸气剂。编辑我的答案。
      • 更新:我已经在上面添加了我完成的代码。谢谢。
      猜你喜欢
      • 2016-08-20
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      相关资源
      最近更新 更多