所以在我的主类testPara中,每当我想执行类段落中的方法时,我总是必须在方法的参数中写文件名。例如:g.readFile(file),g.countSentence(file)。我必须做什么才能使方法不需要,并且我可以通过g.count()执行。也许是全局变量?这是我的段落类:
import java.util.*;
import java.util.ArrayList;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
class paragraph {
public void readFile(File filename) {
try {
Scanner scanner = new Scanner(filename);
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.exit(0);
}
}
public void countSentences(File filename) {
int sentanceCount = 0;
String line;
String delimiters = "?!.";
try {
Scanner scanner = new Scanner(filename);
while(scanner.hasNextLine()) {
line = scanner.nextLine();
for(int i = 0; i < line.length(); i++) {
if (delimiters.indexOf(line.charAt(i)) != -1) {
sentanceCount++;
}
}
}
System.out.println("# of sentances: " + sentanceCount);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.exit(0);
}
}
这就是我测试方法的方式
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class testPara {
public static void main(String args[]) {
paragraph g = new paragraph();
File file = new File("story.txt");
g.readFile(file);
System.out.println("n");
g.countSentences(file);
}
}
仅当您的 Passage 类始终使用同一文件时,这才有意义。然后,您可以向 T段落类添加一个字段private File file;
或其他内容,并使用 setter 设置 File 对象一次。这样:
public class Paragraph {
private File file;
public void setFile(File file){
this.file = file;
}
....
。在主要方法中:
Paragraph p = new Paragraph();
p.setFile(new File("whatever.txt"));
p.readFile();
p.countSentences();
....
当然,你必须修改你的readFile()方法(等等),以便它们使用新的"file"类变量。
编辑:或者,正如@4castle建议的那样,您可以使用构造函数来移交 File 实例(如果您的类需要此实例正常工作,这将是正确的方法)。
将filename
作为类的实例变量Paragraph
class Paragraph {
private String filename;
. . .
// constructor taking the argument for filename
public Paragraph(String filename) {
this.filename = filename;
. . .
并让调用方在从该类构造对象时传递值
Paragraph g = new Paragraph("story.txt");
之后,您的方法不再需要参数,它们可以只从实例变量中获取值。 例如
public void countSentences() {
Scanner scanner = new Scanner(this.filename);