hopefulhokie24 Ответов: 1

Java: сообщение об ошибке нестатической переменной


class Book
{
    //// FIELDS ////
    private String longestWord;
    private int wordCount;
    private ArrayList<String> wordList = new ArrayList<String>();
    /* Declare fields for the word list, the word count, and the longest word.*/
    
    ////// CONSTRUCTOR //////
    //@param f -- the file object
    public Book(File f)
    {
        wordList = readBook(f);
        wordCount = countWords(wordList);
        longestWord = findLongestWord(wordList); 
    }

public static String findLongestWord(ArrayList<String> b)
    {
        try 
        {
            String longest = b.get(0);
        }
        catch (Exception f)
        {
            System.out.println("The longest word eludes me.");
        }
        return longestWord; //Error: non-static variable longestWord cannot be referenced from a static context//
    }


Что я уже пробовал:

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

1 Ответов

Рейтинг:
0

OriginalGriff

Ваш findLongestWord метод объявляется как static это означает, что он не связан с каким - либо конкретным экземпляром содержащего его класса. Это означает, что вы не указываете экземпляр, когда вызываете его, а просто ссылаетесь на класс.
Подумайте о машинах на мгновение: Вы можете спросить: "сколько колес у автомобиля?", не указывая свой автомобиль или мой автомобиль, потому что все автомобили имеют четыре колеса (если бы у них было два, они были бы мотоциклами). Но если вы хотите спросить о цвете, вы должны сказать, какой автомобиль вы имеете в виду - потому что все автомобили не одного цвета, вы должны указать пример: "какого цвета ваша машина?", "какого цвета моя машина?" или "какого цвета эта машина, вон та, рядом с красной?"

Java-это то же самое: для a static метод, вы "спрашиваете static вопросы" - и это означает, что точно так же, как автомобили, вы не можете получить доступ к информации, связанной с экземпляром, в статическом методе / вопросе, поскольку там нет ни одного, о котором можно было бы говорить!

Либо изменить longestWord также быть static (вероятно, то, что вы хотите) или изменить findLongestWord быть не статичным.