2011-10-15 24 views
14

Sto lavorando su un problema e io sono molto attaccato perché sto solo cominciando a imparare Java. Qualsiasi aiuto che riesca a capire sarà fantastico. Devo scrivere un programma che ha due classi. La classe principale leggerà da un file e usa la seconda classe per scoprire come possono essere ripetute le volte le stesse parole nel file e aggiungerle a un array che contenga le parole e il numero di volte in cui la parola è stata ripetuta. Sto bene leggendo la parte del file. Non riesco proprio a spiegarmi come chiamare un metodo dalla seconda classe per aggiungere la parola nell'array e incrementare il contatore. Ecco il mio codice finora se lo esegui vedrai quanto sono nuovo per questo da quanti errori otterrai.java chiamare un metodo da un'altra classe

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

risposta

16

Sei molto vicino. Quello che devi ricordare è quando stai chiamando un metodo da un'altra classe che devi dire al compilatore dove trovare quel metodo.

Così, invece di semplicemente chiamando addWord("someWord"), è necessario inizializzare un'istanza della classe WordList (ad es WordList list = new WordList();), e quindi chiamare il metodo utilizzando tale (cioè list.addWord("someWord");.

Tuttavia, il codice al momento sarà comunque generato un errore là, perché questo sarebbe cercare di chiamare un metodo non statico da uno statico. quindi, si potrebbe o fare addWord() statico o modificare i metodi nella classe parole in modo che non sono statici.

mio male con il paragrafo precedente - tuttavia si potrebbe voler riconsiderare ProcessInput() essendo un metodo statico - ha davvero bisogno di essere?

+1

Grazie, che ha aiutato un sacco – blackStar

+1

mi sembra che manchi qualcosa: cosa sarebbe impedirgli di chiamare 'list.addWord (...)'? È un metodo su una classe completamente separata. Con questa logica, non dovrebbe essere in grado di chiamare 'System.out.println', dato che si tratta di un metodo non statico, giusto? – StriplingWarrior

+0

Hai ragione, non sono del tutto sicuro del motivo per cui ho messo la risposta lì. Volevo dire che forse 'ProcessInput' non ha bisogno di essere un metodo statico. – charlemagne

5

si deve inizializzare l'oggetto (creare l'oggetto stesso) al fine di essere in grado di chiamare i suoi metodi altrimenti si otterrebbe un NullPointerException.

WordList words = new WordList(); 
Problemi correlati