«Не удается найти символ» - класс с основным методом может вызывать методы одного из других классов, но не второго из других? - PullRequest
2 голосов
/ 21 мая 2011

Я прятался здесь некоторое время, но столкнулся с проблемой, которую не могу решить в некоторых программах на Java, которые я пишу для назначения.Могу поспорить, что их не слишком сложно выяснить, но я просто не понимаю.

Я получаю ошибки в соответствии с этим:

RugbyTeamLadderEditor.java:125: cannot find symbol
symbol  : method findAveragePoints(java.util.ArrayList<RugbyTeam>)
location: class RugbyTeamLadderEditor
                        double averagePointsToBePrinted = findAveragePoints(rugbyTeams);

У меня естьтри класса, и из класса с основным методом (RugbyTeamLadderEditor) я могу вызвать класс конструктора, но не другой класс, в котором есть некоторые методы (Part1).Должен ли я что-то делать с пакетами?- все, что я знаю, это то, что я ничего не узнал о пакетах в этом вводном курсе программирования, который я делаю, и я не уверен, как они будут получены, если я буду их использовать.

Мойкод состоит из пары сотен строк, поэтому я поместил их в pastebin - надеюсь, я не нарушил никаких ложных действий, выполнив следующее: / Каждый класс находится в своем собственном файле .java.

http://pastebin.com/FrjYhR2f

Ура!

РЕДАКТИРОВАТЬ: несколько фрагментов моего кода:

В RugbyTeamLadderEditor.java:

// if the identification number is equal to 5, then print out the average points of all of the teams in the ArrayList
    else if (identificationNumber == 5)
    {
        double averagePointsToBePrinted = findAveragePoints(rugbyTeams);
    }

В Part1.java:

/**
 * This method takes a RugbyTeam ArrayList and returns a
 * double that represents the average of the points of all
 * of the rugby teams
 */
public static double findAveragePoints(ArrayList<RugbyTeam> rugbyTeams)
{
    // If there are no objects in the ArrayList rugbyTeams, return 0
    if (rugbyTeams.size() == 0)
        return 0;

    // Declare a variable that represents the addition of the points of each team;
    // initialise it to 0
    double totalPoints = 0;

    // This is a code-cliche for traversing an ArrayList
    for (int i = 0; i < rugbyTeams.size(); i++)
    {
        // Find then number of points a team has and add that number to totalPoints
        RugbyTeam r = rugbyTeams.get(i);
        totalPoints = totalPoints + r.getPoints();
    }

    // Declare a variable that represents the average of the points of each teams, 
    // i.e. the addition of the points of each team divided by the number of teams 
    // (i.e. the number of elements in the ArrayList); initialise it to 0
    double averagePoints = totalPoints / rugbyTeams.size();
    return averagePoints;

}

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

1 Ответ

1 голос
/ 21 мая 2011

Вы пытаетесь вызвать метод findAveragePoints. В текущей реализации вы говорите, что метод будет найден в классе RugbyTeamLadderEditor. Но метод определен в классе Part1. Таким образом, чтобы сделать это, вы добавляете вызов метода с помощью Part1. (поскольку это статический метод), и программа должна работать.


EDIT

Код в основном будет выглядеть так:

double averagePointsToBePrinted = Part1.findAveragePoints(rugbyTeams);

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

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

...