Последняя строка цикла выполняется дважды? - PullRequest
0 голосов
/ 27 декабря 2011

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

но ответы не помогли мне решить.

Я знаю, что это, вероятно, что-то глупое, но надеялся, что кто-то из вас, возможно, сможет указать мне, почему последняя запись в массиве с именем "match" печатается дважды.

Заранее спасибо, Роберт.

Вот мой код:

public String buildMatchList(Match[] matches)
{   
        fixtures = "";

        int i = 0;
        for ( i = 0; i < numMatches; i++)
        {
            if (matches[i] != null)
            {
                fixtures += String.format("\n%-10.10s %10.9s %15.14s", matches[i].getTeamA(), " Vs ", matches[i].getTeamB());           
            }
        }
        System.out.println(fixtures);
}

// -EDIT -
// numMatches set in this method

public void fillMatchArray(Team[] sortedTeams, int numTeams)
    {
        int homeTeam = 0;
        int awayTeam = 0;
        goalsA = 0;
        goalsB = 0;
        fixtures = "";
        boolean played = false;
        matches = new Match[MAX_NUM_GAMES];
        for (homeTeam = 0; homeTeam < sortedTeams.length; homeTeam++)
            for (awayTeam =  homeTeam+1; awayTeam < sortedTeams.length; awayTeam++ )
            {
                String teamA = sortedTeams[homeTeam].getTeamName();
                String teamB = sortedTeams[awayTeam].getTeamName();             
                matchFixtures = new Match(teamA, teamB, goalsA, goalsB, played);
                {
                    fixtures += String.format("\n%-10.10s %10.9s %15.14s", 
                            matchFixtures.getTeamA(), " Vs ", matchFixtures.getTeamB());    
                }               
                int i = 0;          
                matches[i] = matchFixtures;         
                numMatches++;           
                buildMatchList(matches);
            }
    }

Ответы [ 2 ]

6 голосов
/ 27 декабря 2011

Если он печатается дважды, наиболее вероятным объяснением является то, что последние две записи совпадают.Существует общая ошибка, когда вы добавляете изменяемые объекты в коллекцию дважды, и хотя вы думаете, что они разные, они не являются.

Я предлагаю вам попробовать пройтись по коду в отладчике, чтобы посмотреть, что он делает?


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

            int i = 0;          
            matches[i] = matchFixtures;         
            numMatches++; 

, измените его на

matches[numMatches++] = matchFixtures;         
0 голосов
/ 27 декабря 2011

Match - это объект, поэтому match - это ссылочный тип. Когда вы сравниваете их со значением null, он сравнивает ссылку с нулем, которого никогда не было, поэтому он всегда будет возвращать true.

Если вы хотите, чтобы содержимое объекта сравнивалось с нулем, вы должны заменить совпадения [i]! = Пусто на совпадения [i] .equals (пусто) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...