2011-09-08 53 views
0

我知道類似的問題可能已經在這裏提出過,但我無法自己找到答案。爲了說明這一點,我已經找到了解決方法,但想知道爲什麼調用構造函數失敗。我將顯示失敗的代碼,然後工作。找不到符號新

此代碼是一個簡單的文件分析器,它報告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方法做同樣的事情的構造。那麼我的問題是爲什麼我不能以這種方式調用構造函數?再次感謝。

回答

4

構造函數不應該指定返回類型 - 這與匹配類的名稱結合是編譯器如何識別它作爲一個構造函數。因此,而不是:

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

2

public void DataAnalyzer(String fileN) //無缺這裏

1

要定義構造函數和構造函數和不帶任何返回類型。所以寫

public DataAnalyzer(String fileN) 

而不是

public void DataAnalyzer(String fileN) 

希望你得到它?