2016-05-22 11 views
0

Ich versuche, eine Liste mit einem Array von 2 Elementen zu erstellen. Das Problem, das ich habe, ist die letzte Iteration in meiner Schleife setzt alle Arrays der Liste auf die gleiche (meine Vermutung liegt an einer Referenz?). Ich habe mich gefragt, wie ich das verhindern kann.Array zu einer Liste hinzufügen, um zu verhindern, dass es die letzten Iterationsdaten sind?

Das ist, was ich versuche zu tun: So

PathTiles[] links = new PathTiles[2]; 
int j; 
for(int i = 0; i < path.Count; i++) 
{ 
    if(i+1 < path.Count) 
    { 
    links[0] = path[i]; 
    links[1] = path[i]; 

    for(j = i+1; j < path.Count; j++) 
    { 
     if(path[j].x == links[1].x && Mathf.Abs(path[j].y-links[1].y) == 1) 
     { 
      links[1] = path[j]; 
      i = j; 
     } 
     else 
     {  
     break; 
     } 
    } 
    validPath.Add(links); 
    for(int k = 0; k < validPath.Count;k++) 
    { 
     Debug.Log(validPath[k].x+", "+validPath[k].y); 
    } 
    Debug.Log("====="); 
    } 
} 

die Konsole zeigt dies:

0, 0 
===== 
1, 1 <-- why did this become 1, 1 and not stay as 0, 0 
1, 1 
===== 

Hat jemand wissen, wie ich behalten kann den ersten Datenwert und nicht haben es überschrieben ? Ich habe derzeit den Eindruck, dass es daran liegt, dass es eine Referenz speichert und ich habe die Werte geändert, aber ich weiß nicht, wie ich damit aufhören soll.

+0

Wo sind 'validPath' und' path' definiert? und warum initialisierst du 'j' außerhalb der ersten 'for'-Schleife? –

+0

Spielt es eine Rolle, wo sie definiert sind? Dies ist nur ein Codeschnipsel von einem großen Skript, das das Verhalten verursacht, das ich nicht auftreten möchte. Warum ich 'j' außerhalb setze, hauptsächlich weil sonst im Initialisierung J mehrere Male für jede I-Iteration, Mikro-Optimierung, nicht wirklich wichtig für die Frage, aber es ist etwas, was ich getan habe, seit ich begann C# vor allem eine Gewohnheit zu lernen heutzutage. – Sir

+0

Es ist nicht klar, was die Werte von 'path []' sind oder wie viele Elemente darin enthalten sind. Außerdem scheinen Sie die geschweiften Klammern der if-Anweisung nicht zu schließen. Gibt es eine schließende Klammer? –

Antwort

1

Versuchen Sie, die PathTiles[] links = new PathTiles[2]; innerhalb der ersten for-Schleife-Anweisung hinzuzufügen. Wie Sie sagten, ist dies ein Problem der Referenzen. Da Sie der Liste die gleichen modifizierten Links hinzugefügt haben. der 1. Datenwert wird überschrieben.

int j; 
for (int i = 0; i < path.Count; i++) 
{ 
    PathTiles[] links = new PathTiles[2]; //<-- here 
    if (i + 1 < path.Count) 
    { 

     links[0] = path[i]; 
     links[1] = path[i]; 
     ... 
Verwandte Themen