2011-10-15 152 views
14

我正在研究一个问题,而且我很困难,因为我刚开始学习java。任何帮助我可以理解这将是伟大的。我必须编写一个有两个类的程序。主类将从文件中读取,并使用第二个类来查找文件中相同单词的重复次数,并将它们添加到包含单词和单词重复次数的数组中。我很喜欢阅读文件部分。我似乎无法围绕如何调用第二类的方法来将该单词添加到数组中并增加计数器。 这是我的代码到目前为止,如果你运行它,你会看到多少新的错误你会得到。java调用另一个类的方法

import java.io.*; 

public class Words{ 
public static void main (String [] args) 
{ 
    ProcessInput(); 
    System.out.println("\nprogram finished"); 
} 


public static WordList ProcessInput() 
{ 
    BufferedReader inputFile; 
    String inputLine; 
    String[] word; 
    WordList words; 
     try 
     { 
      inputFile=new BufferedReader(new FileReader ("inputFile.txt")); 
      inputLine = inputFile.readLine(); 
      while (inputLine !=null) 
      { 
       word=inputLine.toLowerCase().split(" "); 
       for (int i=0; i<word.length; i++){ 
        System.out.println (word[i]); 
        words=addWord(word[i]); 
       } 
       inputLine = inputFile.readLine(); 

      } 
      inputFile.close(); 
     } 
     catch (IOException ioe) 
     { 
      System.out.println (ioe.getMessage()); 
      ioe.printStackTrace(); 
     } 
     return words; 
} 

} 

class WordList { 
String [] words; 
int wordcount; 
public WordList (){ 
    words= new String [1000]; 
    wordcount=0; 

} 

public String addWord (String word) { 
    words[wordcount]=word; 
    wordcount=+1; 
    return words[wordcount]; 

} 

public void printList(){ 
    for (int i=0; i<wordcount; i++){ 
     System.out.println (words[i]); 
    } 
} 
} 

回答

16

你非常接近。你需要记住的是,当你从另一个类中调用一个方法时,你需要告诉编译器在哪里找到该方法。

因此,而不是简单地调用addWord("someWord"),你将需要初始化单词表类(如WordList list = new WordList();)的一个实例,然后使用(即list.addWord("someWord");

然而调用该方法,你的代码这个时刻仍然会抛出一个错误,因为这会试图从静态方法中调用非静态方法,因此,您可以使 addWord()为静态,或者更改Words类中的方法,使它们不是静态的。

我对上述段落不满 - 但是您可能要重新考虑ProcessInput()是一个静态方法 - 它真的需要吗?

+1

谢谢你,帮助很多 – blackStar

+1

我似乎错过了一些东西:什么可以防止他调用'list.addWord(...)'?这是一个完全独立的课程。通过这个逻辑,他不应该能够调用'System.out.println',因为它是一个非静态方法,对吧? – StriplingWarrior

+0

你是对的,我不太清楚为什么我把答案放在那里。我的意思是提出可能'ProcessInput'不需要是一个静态方法。 – charlemagne

5

你必须初始化对象,以便能够调用它的方法,否则你会得到一个NullPointerException(创建对象本身)。

WordList words = new WordList();