我已经为实验室作业编写了以下代码,但是,我的教授希望我将主要方法分解为其他方法并在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()
}
答案 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}}