2016-06-12 3 views
-1

Entschuldigung für noob Frage :). Ich habe 2d Array 3x3 mit Zufallszahlen (-5,5)Wie man alle Zahlen vom 2d Array bekommt, die die if Bedingung in 1d Array übergeben

for (int i = 0; i < 3; i++) 
       for (int j = 0; j < 3; j++) 
       { 
        dPole[i, j] = nc.Next(-10, 10); 

Ich möchte alle Zahlen gefüllt bekam, die positiv sind und sie dann in 1d Array speichern:

foreach (int j in dPole) 
      { 


       if (j > 0) 
       { 
        Console.WriteLine(j); 
        for (int i = 0; i < sizeOf1dArray; i++) 

          jPole[i] = j; 
       } 
      } 

Ausgabe der Konsole .WriteLine (j) - überprüfen, ob die Bedingung richtig ist:

6 
2 
5 
6 
9 
8 

Ausgabe von 1D-Array:

8 
8 
8 
8 
8 
8 

Nur die letzte Nummer wird im Array gespeichert. Warum? Vielen Dank.

+3

Weil Sie den Wert jeder Position Ihres Arrays zuweisen? Das macht die innere Schleife. –

+3

Jedes Mal, wenn Sie einen * single * -Wert mit 'j> 0' finden, iterieren Sie über das * gesamte *' jPole'-Array und weisen diesen 'j'-Wert jedem Element zu. Es ist schwierig herauszufinden, wie man hier helfen kann, da a) du dein Problem zu sehr abstrahiert hast und b) es nicht klar ist, warum du diese Schleife geschrieben hast. –

+2

Beachten Sie, dass Sie einfach 'jPole = dPole.Where (x => x> 0) .ToArray();' (Wenn Sie die 'WriteLine()' nicht brauchen) –

Antwort

0
for (int i = 0; i < sizeOf1dArray; i++) 

     jPole[i] = j; 

weil bei dieser Schleife Aktion letzter J-Wert 8 ist und diese Schleife füllt alle jPole Array mit J-Wert jedes Mal, bedeutet, dass sie alle mit 6 füllen zuerst, als setzt 2 bei gesamter Array, dann 5 .. .... und für letzte füllt es mit 8.em

Versuch etwas wie die

int i = 0; 
foreach (int j in dPole) 
     { 


      if (j > 0) 
      { 
       Console.WriteLine(j); 
       jPole[i] = j; 
       i++; 
      } 
     } 
2

Eine alternative Route Cast<int> nutzen würde das Array zu glätten und verwenden Where zu filtern.

int[,] dPole = new int[,] { { 3, -5, 0 }, { -3, 3, 2 }, { -2, 1, 1 } }; 
int[] jPole = dPole.Cast<int>().Where(i => i > 0).ToArray(); 
// jPole is now { 3, 3, 2, 1, 1 };