需要将我的主要方法分解为更小的方法

时间:2015-11-11 22:49:00

标签: java

我已经为实验室作业编写了以下代码,但是,我的教授希望我将主要方法分解为其他方法并在main方法中调用这些方法。我尝试创建用于创建输入和输出流的方法,并且我尝试创建一个用于实际写入反向文件的方法,但我没有在哪里。有人能指出我正确的方向吗?我是否需要创建另一个我将实例化并调用这些方法的类?我是java的新手,所以感谢任何帮助!

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Reads lines of text from a file named testclass.txt and writes them to a file
 * named output.txt in reverse order.
 */

public class ReverseFile {

   public static void main(String[] args) {

      Scanner fileRead;     // input stream for reading text file.
      PrintWriter fileWrite;  // output stream for writing text file.

      ArrayList<String> fileLines;  // An ArrayList for holding the lines of the text file.
      fileLines = new ArrayList<String>();

      try {  // Create the input stream.
         fileRead = new Scanner(new File("testclass.txt"));
      }
      catch (FileNotFoundException e) {
         System.out.println("Can't find text file");
         return;  // End the program by returning from main().
      }

      try {  // Create the output stream.
         fileWrite = new PrintWriter(new FileWriter("output.txt"));
      }
      catch (IOException e) {
         System.out.println("Can't open file output.txt");
         System.out.println("Error: " + e);
         fileRead.close();  // Close the input file.
         return;        // End the program.
      }

      while ( fileRead.hasNextLine() ) {  // Read until end-of-file.
         String textLine = fileRead.nextLine();
         System.out.println(textLine);
         fileLines.add(textLine);
      }

      // Output the text in reverse order.

      for (int i = fileLines.size()-1; i >= 0; i--)
         fileWrite.println(fileLines.get(i));
         //System.out.println(reverseLines);


      System.out.println("Done, check output.txt");

      fileRead.close();
      fileWrite.close();

   }  // end of main()

}

3 个答案:

答案 0 :(得分:2)

理想情况下,每个方法应该只做一件事,并且有一个名称可以清楚说明那件事是什么。

我的建议是你的主要方法应该是这样的:

public static void main(String[] args) {
    List<String> lines = createAndReadInputStream();
    reverse(lines);
    createAndWriteOutputStream(lines);
}

这使得读者完全清楚该方法的作用以及所有实现细节在其他方法中。

然后为下一个方法做同样的事情:

private List<String> createAndReadInputStream() {
    Scanner inputScanner = createInputStream();
    return scanToLines(inputScanner);
}

等等。如果结构正确,您的类变量都将成为本地范围的变量,并且您的代码简单易读。你还会发现你需要更少的评论来解释发生了什么:这些方法的名称通常都足够了。

如果您有兴趣了解教授为什么要求这样做,以及如何去做,我强烈推荐罗伯特·马丁的“清洁代码”一书。几年前,我参与的软件开发团队(11个敏捷团队中的80人)采用了它,我们的代码的质量,可读性和可维护性已经提高了。虽然需要一些时间来适应它值得努力。在我看来,更多代码意味着更多错误的古老格言是完全错误的 - 只要额外代码具有可读性,可测试性和可维护性,那么它就意味着更少的错误。

答案 1 :(得分:0)

这是一个例子。移动此部分代码:

var $tagsControl = $("#Tags").select2({
        ajax: {
            url: '/Tags/Search',
            dataType: 'json',
            delay: 250,
            results: function (data) {
                return {
                    results: $.map(data, function (item) {
                        return {
                            text: item.text,
                            id: item.id
                        }
                    })
                };
            },
            cache: false
        },
        minimumInputLength: 2,
        maximumSelectionLength: 6
    });

    var data = [];
    var tags = $("#Tags option").each(function () {
        data.push($(this).val());
    });
    $tagsControl.val(data).trigger("change");

进入ReverseFile类中名为createInputStream的新私有方法。从您删除该部分的代码中的点调用新成员。不要忘记返回&#34; fileRead&#34;从方法。

答案 2 :(得分:-1)

这个怎么样:

{{1}}