找不到符号新

问题描述:

我知道类似的问题可能已经在这里提出过,但我无法自己找到答案。为了说明这一点,我已经找到了解决方法,但想知道为什么调用构造函数失败。我将显示失败的代码,然后工作。找不到符号新

此代码是一个简单的文件分析器,它报告txt文件中的第一个和最后一个(非精确)条目。其中一个要求是从命令行收到一个参数。

谢谢你的时间。

失败:

$ 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方法做同样的事情的构造。那么我的问题是为什么我不能以这种方式调用构造函数?再次感谢。

构造函数不应该指定返回类型 - 这与匹配类的名称结合是编译器如何识别它作为一个构造函数。因此,而不是:

public void DataAnalyzer(String fileN) 

写:

public DataAnalyzer(String fileN) 

的更多信息:http://download.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

谢谢。最有用的。我感觉有点迟钝,而这在C++中甚至不合法。再次感谢。 – on2valhalla

+0

保存我的一天:D – Turion

public void DataAnalyzer(String fileN) //无缺这里

要定义构造函数和构造函数和不带任何返回类型。所以写

public DataAnalyzer(String fileN) 

而不是

public void DataAnalyzer(String fileN) 

希望你得到它?