2011-12-26 7 views
0

私はJavaの初心者です。これが私の最初の投稿です。 この記事は、類似したように見えたが、私はまさに私の問題のように何かを見つけることができませんでした: Why is this print line command executing twice?forループの最後の行は2回実行されますか?

が、答えは私がそれを解決する助けにはなりませんでした。

私はそれがおそらく何かばかげたことを知っていますが、皆さんのうちの一人が「マッチ」という名前の配列の最後のエントリが2度印刷される理由を指摘できるかもしれないことを期待していました。

ありがとうございます。 Robert。それが2回印刷した場合、最も可能性の高い説明は、最後の2つのエントリが同じであることである、

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); 
      } 
    } 
+0

変数「numMatches」はどこに設定されていますか? –

+0

最後に2つのエントリが同じであることを確認してください。また、 'matches'を埋めている場所にスニペットを入れますか? – havexz

答えて

6

は、ここに私のコードです。変更可能なオブジェクトをコレクションに2回追加する一般的なバグがあります。異なるオブジェクトであると考えている間は、そうではありません。

デバッガのコードをステップ実行して、何をしているのかを確認することをお勧めします。


ここで、コードをステップ実行すると役立ちます。私はいつも

matches[numMatches++] = matchFixtures;   
+0

こんにちは、返信いただきありがとうございます。 – Robert

+0

こんにちは、返信いただきありがとうございます。 私が変更されました: へ (!マッチ[I] = null)の場合:今 (!マッチ[i]を.equals(ヌル))ifと と、nullポインタエラーを取得します。 – Robert

+0

numMatchesが設定されているスニペットで元の投稿に編集を追加しようとしました。 もう一度ありがとうございます。 – Robert

-1

マッチがオブジェクトである0〜

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

の変化、それをあるようあなたはとても参照型と呼ばれている一致し、配列の最初の要素を毎回設定されています。それらをnullと比較すると、nullへの参照が比較されますが、これは決して真ではありません。

あなたはそれがnullにオブジェクトの内容を比較したい場合は、[I]!= nullのと一致[i]を.equals(ヌル)マッチを置き換える必要があります。

+0

'matches [i]'が 'null'のときは真です。例えば最初に配列を作成すると、その中のすべての値は 'null'になります。値が 'null'のときに' matches [i] .equals(null) 'を実行すると、NullPointerExceptionがスローされます –

関連する問題