2016-05-02 15 views
0

Ich versuche, ein Array in zwei verschachtelten Schleifen für will, dass jeder zweiten pPiece [] i jedoch zu füllen ak Attribut von 0 oder 1 jede Sekunde pPiece [] bzw.Fill Array in verschachtelten Schleifen

Zum Beispiel geben -

pPieces[0] = new Piece(0,pcName,1); 
    pPieces[1] = new Piece(1,pcName,1); 
    pPieces[2] = new Piece(0,pcName,1); 
    pPieces[3] = new Piece(1,pcName,1); 
    etc.... 

Was ich

private Piece pPieces[] = new Piece[8]; 

for(int j=0; j<pCount; j++) //pCount = 4 
    { 
     for(int k=0; k<pcCount; k++) //pcCount = 2 
     { 
      String pcName = "Piece " + (allocation()); 
      pPieces[j+k] = new Piece(k,pcName,1); 
     } 
    } 

es auf diese Weise ergibt pPieces Doing [] Index über geschrieben 4 mal haben sein, denke ich. Ist es möglich, dieses Array, in dem 8 Objekte gespeichert werden sollen, richtig zu füllen, wobei jedes zweite "k" gleich 0 oder 1 ist?

Antwort

2

Das Problem in der aktuellen Lösung ist, dass j+k den gleiche Wert mehrmals während der beiden Schleifen erhalten:

for(int j=0; j<pCount; j++) //pCount = 4 
{ 
    for(int k=0; k<pcCount; k++) //pcCount = 2 
    { 
     String pcName = "Piece " + (allocation()); 
     pPieces[j+k] = new Piece(k,pcName,1); 
    } 
} 

Wenn zum Beispiel j = 0 und k = 1, werden Sie j + k = 1 haben. Aber Sie werden auch das haben, wenn j = 1 und k = 0.

Das Problem kommt von der Tatsache, dass Sie die Variable j in Schritten von 1 erhöhen, wenn Sie es in Schritten von pcCount erhöhen sollten; und das damit zusammenhängende Problem ist, dass j nur pCount*pcCount und nicht pCount gehen sollte.

for(int j=0; j<pCount*pcCount; j+=pcCount) //<--- j+=pcCount here, not j++ 
{ 
    for(int k=0; k<pcCount; k++) 
    { 
     String pcName = "Piece " + allocation(); 
     pPieces[j+k] = new Piece(k,pcName,1); 
    } 
} 

Als Randbemerkung, sollten mehr beschreibende Variablennamen anstelle von pCount und pcCount verwenden.

+0

ive Erstellen dies getan und es ist nur mit 2 Stück meines Array Füllung statt 4 Objekte habe ich eine Schleife durch pPieces.length und Druck zu gehen und nur 2 Plätze waren besetzt. Ich habe "(allocation())" geändert; zu "(j + k));" BTW – danielb

+0

ja, dass es 4 hinzufügen danke. Sowohl diese Antwort als auch die Antworten von @Geeth Lochana sind korrekt.Danke – danielb

0

Tatsächlich wird sich j + k überschneiden. Aber 2j + k nicht. Sie müssen ersetzen durch:

private Stück pPieces [] = neues Stück [8];

for(int j=0; j<pCount; j++) //pCount = 4 
    { 
     for(int k=0; k<pcCount; k++) //pcCount = 2 
     { 
      String pcName = "Piece " + (allocation()); 
      pPieces[2*j+k] = new Piece(k,pcName,1); 
     } 
    } 
} 
2

Code Umgestalten wie folgt, die Themen pPieces[j+k] = new Piece(k,pcName,1);

Your j+k => 0,1,1,2,2,3,3,4 

Korrigierte-Code ist

private Piece pPieces[] = new Piece[8]; 
int count=0; 

for(int j=0; j<pCount; j++) //pCount = 4 
    { 
     for(int k=0; k<pcCount; k++) //pcCount = 2 
     { 
      String pcName = "Piece " + (allocation()); 
      pPieces[count++] = new Piece(k,pcName,1); 
     } 
    } 
+0

das hat funktioniert, danke – danielb

0

Der % Betreiber Verwendung hier sein kann:

private Piece pPieces[] = new Piece[8]; 

for(int j = 0; j < pPieces.length; j++) { 
    String pcName = "Piece " + (allocation()); 
    pPieces[j] = new Piece(j % 2,pcName,1); 
} 

Der Operator % (Modulus) gibt den Rest der Ganzzahldivision zurück.

z.B.

0 % 2 = 0 
1 % 2 = 1 
2 % 2 = 0 
3 % 2 = 1 

einen Wechsel von 1 und 0

+0

das ist entworfen, um immer mein pPieces [] Array zu füllen. Ich möchte nicht, dass das passiert. Aber gute Idee! – danielb

+0

@danielb War das nicht das Ziel? _ "Ist es möglich, dieses Array richtig zu füllen, in dem 8 Objekte gespeichert werden sollen ..." _ –

+0

Ja, ich möchte, dass es gefüllt wird, aber nicht unbedingt. Ihre Idee ist richtig, wenn ich sie immer ausfüllen möchte. Entschuldigung, ich glaube nicht, dass ich es klar genug erklärt habe – danielb

Verwandte Themen