有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从这些细节开始

我已经有了一个框架,我需要什么样的程序,只要我被告知我需要的方法。然而,除此之外,我很难弄清楚如何开始编写这个程序。详情如下我不是要求为我完成程序,实际上我只是对如何开始感到困惑。我知道我需要读入用户输入来获取文本文件,我们在我的学院使用scanner,但我不知道这是否需要在构造函数中,在main中,还是在另一种方法中

  1. 接受单个命令行参数,即包含以行分隔的字符串对列表的文本文件。这些字符串对将表示依赖关系图中的边。例如,一行内容为:a.java B.java表示从a.java到B.java的依赖边。表示上述图形的文件可能类似于:Main。java A.java A.java B.java

  2. 将从文件读取的每个字符串映射到唯一的整数标识符。此映射将使将文件名转换为数组索引变得容易

  3. 将每个唯一整数标识符(从上面)映射回原始字符串

  4. 计算表示字符串之间依赖关系的邻接矩阵

  5. 对邻接矩阵执行传递闭包操作,以生成表示字符串之间传递依赖关系的新闭包矩阵。执行此操作的一个简单方法是Floyd Warshall算法-您可能希望对此主题进行一些研究

  6. 您的输出必须遵循课程网站上示例输出文件所示的格式。课程网站上有一个示例输入文件和相应的输出文件。在本例中,您的输出必须具有相同的格式。目标是以一种有吸引力的、可读的格式输出信息,以明确下面列出的每个方法都能正确工作

  7. 具有私有字段返回类型(如getNameIdMap、getIdNameMap、getRoots等)的方法 而不是返回类内部状态的可变部分,即应该返回映射列表的副本(克隆)。通过这种方式,调用方可以获得完全可用的对象(例如,list或map),而不会影响类的内部状态

您的程序还应提供以下方法:

  1. 公共映射getNameIdMap()-返回从字符串到唯一整数的映射 标识符。整数标识符表示给定字符串的邻接矩阵和闭包矩阵的索引。注意:在Python中,返回值必须是一个字典,其成对键为字符串,值为int

  2. public Map getIdNameMap()-返回从唯一整数标识符返回的映射 到原始字符串。注意:在Python中,返回值必须是一个字典,其成对键为int,值为字符串

  3. public int[]getDependenceGraph()-返回表示文件之间依赖关系的邻接矩阵

  4. public int[][]getTransitiveDependenceGraph()-在应用传递闭包操作后返回依赖关系图

  5. public List getRoots()-返回与其他文件不依赖的文件相对应的字符串列表(例如,上面示例中的Main)。注意:在Python中,返回值也是字符串列表

  6. public List getLeaves()-返回与不依赖其他文件的文件相对应的字符串列表(例如,上面示例中的B)。注意:在Python中,返回值也是字符串列表

  7. public void removeLeaf(字符串叶)-从邻接和传递闭包矩阵中移除叶。这意味着,如果X依赖于Y,并且Y是被移除的叶子,那么X的依赖性依赖于YY也被消除了。这可能会也可能不会让X成为新的一页。考虑在矩阵中使用一个特殊的数字(即,0和1以外)来指示文件已被逻辑删除。

  8. 公共列表防火墙(字符串节点)-计算指定文件的“类防火墙”。在软件工程中,类防火墙概念指出,当在系统上执行维护时,只有更改的类和受更改影响的类需要重新测试。注意:在Python中,返回值也是字符串列表。对于此方法,您应该重新测试间接和直接受影响的类。例如,如果A类依赖于B类,B类依赖于C类,而您更改了C类,那么您应该重新测试A类和B类。

  9. public void printParallelGroups()-假设我们希望并行编译文件,我们需要识别不会触发其他文件编译的文件;这些是依赖关系图中的叶子。此方法标识可以并行编译的文件,打印文件列表,并将其从图形中删除。该方法应重复此过程,直到所有文件都已“编译”


共 (1) 个答案

  1. # 1 楼答案

    在开始编写代码时,我多次遇到类似的情况。我想,你对自己的问题有很好的了解。你可以用2-3个值制作一个示例文本文件(甚至是在一张纸上),并尝试更多地思考你想要的东西。您知道,需要有一个以您的文件名命名的main方法。您可以在main、constructor或任何其他方法中使用scanner。这取决于你使用的设计。如果你想要一个非常基本的程序,你可以在main方法中声明它,然后继续。但我建议您应该使用另一种方法从文件中获取输入,比如readInputFromText(),在这里声明一个本地扫描对象。当然,你也可以用其他方式来做。 我遵循的一些基本规则是:

    1. 每个任务都有不同的方法。要打开一个文件,我有一个fileOpener,要关闭它,我有另一个方法等等。每个方法都应该只执行一个任务。所有与file相关的函数都将放在一个类中,比如FileUtil。这是一个实用程序任务,而不是您的主要任务,因此您将所有这些util类,如FileUtilities、StringUtilities、DatabaseUtilites等保存在一个util包中

      1. 良好的命名策略和遵循惯例

      2. 使用Maven或Ant等构建工具

      3. 做文档和适当的测试

    我不知道它是否真的以某种方式回答了你的问题。但是记住这些,然后开始你的计划。在每个阶段进行测试,并制作初级版本。为后续版本保留改进

    如果您有具体的问题,一个大社区正在等着您:)

    致以最良好的祝愿