2017-06-08 13 views
0

私のコードは自己説明だと思います。トラック配列要素の順序

public Town[] GetShortestDistanceBetweenTowns() { 
    Town[] allTowns = getTowns(); 
    Town[] bestPath = allTowns; 
    int bestDistance = CalculateDistance(bestPath); 
    int newDistance = bestDistance; 

    //shuffle allTowns array and look for best distance 
    for(int i=0; i<100; i++) { 
     MixArray(allTowns); 
     newDistance = CalculateDistance(allTowns); 

     if (newDistance < bestDistance) { 
      bestPath = allTowns; 
      bestDistance = newDistance; 
     } 
    } 

    return bestPath; 
} 

私はそれはまた、私のbestPath配列の順序を変更しているMixArray(allTowns)を使用するときに問題があります。私はこの配列で最高の順序だけを保ちたい。私はそれで何ができますか?

+0

さて、あなただけの1つの配列を持っている - あなたは 'bestPath'に(参照です)' allTowns'の値を代入しています。.. 2つの変数は同じ配列を参照します。 1つの要素を経由してその配列を変更すると、他の要素を介してその変更が表示されます。参照型が正常に動作するのと同じです。代わりに配列を複製したいでしょうか? –

+1

また、[Dijkstra's Algorithm](https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm)を見て、オブジェクトのコレクション間の最短距離を見つける必要があります –

答えて

3

Townは参考タイプですので、Town[] bestPath = allTowns;bestPathが常にallTownsと一致することを意味します。コピーするには、TownクラスのIClonableを実装するか、重複した値を持つ新しいTownを作成するコピー関数を追加するだけです。ここで

は値型対参照の素晴らしい記事です:はい http://www.albahari.com/valuevsreftypes.aspx

関連する問題