2011-10-15 85 views
14

Tôi đang làm việc về một vấn đề và tôi rất khó khăn vì tôi mới bắt đầu học java. Bất kỳ sự giúp đỡ nào tôi có thể hiểu điều này sẽ thật tuyệt vời. Tôi phải viết một chương trình có hai lớp. Lớp chính sẽ đọc từ một tập tin và sử dụng lớp thứ hai để tìm những lần có thể những từ giống nhau được lặp đi lặp lại trong tệp và thêm chúng vào một mảng có chứa các từ và số lần từ lặp lại. Tôi ok với việc đọc phần tập tin. Tôi chỉ có thể không thể quấn đầu của tôi xung quanh làm thế nào để gọi một phương pháp từ lớp thứ hai để thêm từ vào mảng và tăng truy cập. Đây là mã của tôi cho đến nay nếu bạn chạy nó, bạn sẽ thấy làm thế nào mới tôi đến này bằng bao nhiêu lỗi bạn sẽ nhận được.java gọi một phương thức từ một lớp khác

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]); 
    } 
} 
} 

Trả lời

16

Bạn đang ở rất gần. Những gì bạn cần nhớ là khi bạn đang gọi một phương thức từ một lớp khác, bạn cần nói cho trình biên dịch biết nơi để tìm phương thức đó.

Vì vậy, thay vì chỉ đơn giản gọi addWord("someWord"), bạn sẽ cần phải khởi tạo một thể hiện của lớp Wordlist (ví dụ WordList list = new WordList();), và sau đó gọi phương thức sử dụng đó (tức là list.addWord("someWord");.

Tuy nhiên, mã của bạn tại thời điểm sẽ vẫn ném một lỗi ở đó, bởi vì điều đó sẽ cố gắng gọi một phương thức không tĩnh từ một phương thức tĩnh.Vì vậy, bạn có thể làm cho addWord() tĩnh hoặc thay đổi các phương thức trong lớp Từ để chúng không tĩnh.

Lỗi của tôi với đoạn trên - tuy nhiên bạn có thể muốn xem xét lại ProcessInput() là một phương pháp tĩnh - có thực sự cần phải không?

+1

Cảm ơn bạn, điều đó đã giúp rất nhiều – blackStar

+1

Tôi dường như thiếu một cái gì đó: điều gì sẽ ngăn cản anh ta gọi 'list.addWord (...)'? Đó là một phương pháp trên một lớp hoàn toàn riêng biệt. Theo logic đó, anh ta cũng không thể gọi 'System.out.println', vì nó là một phương pháp không tĩnh, phải không? – StriplingWarrior

+0

Bạn là đúng, tôi không hoàn toàn chắc chắn tại sao tôi đặt câu trả lời ở đó. Tôi có nghĩa là để đưa lên có lẽ 'ProcessInput' không cần phải là một phương pháp tĩnh. – charlemagne

5

Bạn cần phải khởi tạo đối tượng (tạo ra các đối tượng chính nó) để có thể gọi các phương thức của nó nếu không bạn sẽ nhận được một NullPointerException.

WordList words = new WordList(); 
Các vấn đề liên quan