java, вызывающий метод из другого класса

#java

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

Ответ №1:

Вы очень близки. Что вам нужно помнить, так это то, что когда вы вызываете метод из другого класса, вам нужно сообщить компилятору, где найти этот метод.

Итак, вместо простого вызова addWord("someWord") вам нужно будет инициализировать экземпляр класса WordList (например WordList list = new WordList(); ), а затем вызвать метод, используя это (т.е. list.addWord("someWord"); .

Однако ваш код на данный момент все равно выдаст там ошибку, потому что это будет попытка вызвать нестатический метод из статического. Итак, вы можете либо сделать addWord() статические, либо изменить методы в классе Words, чтобы они не были статическими.

Я не согласен с приведенным выше абзацем — однако вы, возможно, захотите пересмотреть ProcessInput() статус статического метода — действительно ли это нужно?

Комментарии:

1. Кажется, я что-то упускаю: что помешало бы ему позвонить list.addWord(...) ? Это метод для совершенно отдельного класса. По этой логике он не должен иметь возможности вызывать System.out.println либо, поскольку это нестатический метод, верно?

2. Вы правы, я не совсем уверен, почему я поместил этот ответ туда. Я имел в виду, что, возможно ProcessInput , не обязательно должен быть статическим методом.

Ответ №2:

Вы должны инициализировать объект (создать сам объект), чтобы иметь возможность вызывать его методы, иначе вы получите NullPointerException .

 WordList words = new WordList();