我知道之前可能已经提出了类似的问题,但我自己找不到答案。为了序言,我已经找到了一个解决方法,但想知道为什么调用构造函数失败了。我将显示失败的代码然后工作。
此代码是一个简单的文件分析器,它报告txt文件中的前10个和中间(不精确)条目。其中一个要求是从命令行接收一个参数。
感谢您的时间。
FAILED:
$ javac DataAnalyzerTester.java
DataAnalyzerTester.java:11: cannot find symbol
symbol : constructor DataAnalyzer(java.lang.String)
location: class DataAnalyzer
analyze = new DataAnalyzer(args[0]);
-----------^
//DataAnalyzerTester.java
import java.util.*;
import java.io.*;
public class DataAnalyzerTester
{
public static void main(String[] args)
{
DataAnalyzer analyze;
analyze = new DataAnalyzer(args[0]);
//analyze.setFile(args[0]);
System.out.println(analyze.min());
System.out.println(analyze.max());
System.out.println(analyze.avg());
}
}
//DataAnalyzer.java
import java.util.*;
import java.io.*;
public class DataAnalyzer
{
public void DataAnalyzer(String fileN)
{
try
{
reader = new FileReader(fileN);
Scanner in = new Scanner(reader);
while(in.hasNextLine())
{
fileContent.add(in.nextLine());
}
}
catch(IOException exception)
{
System.out.println("File not found. Try again Dumbass.");
}
}
public void setFile(String fileN)
{
try
{
reader = new FileReader(fileN);
Scanner in = new Scanner(reader);
while(in.hasNextLine())
{
fileContent.add(in.nextLine());
}
}
catch(IOException exception)
{
System.out.println("File not found. Try again Dumbass.");
}
}
public String min()
{
return fileContent.get(0);
}
public String max()
{
return fileContent.get(fileContent.size() - 1);
}
public String avg()
{
return fileContent.get((int) fileContent.size() / 2);
}
private FileReader reader;
private ArrayList<String> fileContent = new ArrayList<String>();
}
基本上上面的版本不起作用,但我添加了一个setFile方法来做与构造函数相同的事情。我的问题是为什么我不能以这种方式调用构造函数?再次感谢。
答案 0 :(得分:4)
构造函数不应该指定返回类型 - 这与匹配类的名称相结合是编译器将其识别为构造函数的方式。所以而不是:
public void DataAnalyzer(String fileN)
写:
public DataAnalyzer(String fileN)
更多信息:http://download.oracle.com/javase/tutorial/java/javaOO/constructors.html
答案 1 :(得分:2)
public void DataAnalyzer(String fileN)
//这里没有空白
答案 2 :(得分:1)
您正在定义构造函数,并且构造函数不接受任何返回类型。所以写
public DataAnalyzer(String fileN)
而不是
public void DataAnalyzer(String fileN)
希望你明白了吗?