无法找到新的符号

时间:2011-09-08 06:04:28

标签: java

我知道之前可能已经提出了类似的问题,但我自己找不到答案。为了序言,我已经找到了一个解决方法,但想知道为什么调用构造函数失败了。我将显示失败的代码然后工作。

此代码是一个简单的文件分析器,它报告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方法来做与构造函数相同的事情。我的问题是为什么我不能以这种方式调用构造函数?再次感谢。

3 个答案:

答案 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)

希望你明白了吗?