2011-10-15 17 views
14

Estoy trabajando en un problema y estoy muy atascado porque estoy empezando a aprender java. Cualquier ayuda que pueda llegar a entender esto sería genial. Tengo que escribir un programa que tiene dos clases. La clase principal leerá de un archivo y usará la segunda clase para encontrar cómo se pueden repetir las mismas palabras en el archivo y agregarlas a una matriz que contiene las palabras y la cantidad de veces que se repite la palabra. Estoy de acuerdo con la lectura de la parte del archivo. Simplemente no puedo entender cómo llamar a un método de la segunda clase para agregar la palabra en la matriz e incrementar el contador. Aquí está mi código hasta ahora, si lo ejecutas, verás cuán nuevo soy ante esto por la cantidad de errores que obtendrás.java llamando a un método de otra clase

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

Respuesta

16

Estás muy cerca. Lo que debe recordar es que cuando llama a un método de otra clase, necesita decirle al compilador dónde encontrar ese método.

Así, en lugar de simplemente llamando addWord("someWord"), tendrá que inicializar una instancia de la clase WordList (por ejemplo WordList list = new WordList();), y luego llamar al método que utiliza que (es decir list.addWord("someWord");.

Sin embargo, su código en el momento todavía arrojará un error allí, porque eso sería tratar de llamar a un método no estático desde uno estático. Por lo tanto, puede hacer que addWord() sea estático o cambiar los métodos en la clase Palabras para que no sean estáticos.

No está de acuerdo con el párrafo anterior, pero es posible que desee reconsiderarlo ProcessInput() siendo un método estático, ¿realmente necesita serlo?

+1

Gracias, eso ayudó mucho – blackStar

+1

Parece que me falta algo: ¿qué le impediría llamar 'list.addWord (...)'? Es un método en una clase completamente separada. Según esa lógica, tampoco debería poder llamar a 'System.out.println', ya que es un método no estático, ¿verdad? – StriplingWarrior

+0

Tiene razón, no estoy muy seguro de por qué puse esa respuesta allí. Quería mencionar que tal vez 'ProcessInput' no necesita ser un método estático. – charlemagne

5

Usted tiene que inicializar el objeto (crear el objeto en sí mismo) con el fin de ser capaz de llamar a sus métodos de otra forma podrías tener un NullPointerException.

WordList words = new WordList(); 
Cuestiones relacionadas