2016-05-02 3 views
0

Я пытаюсь заполнить массив в двух вложенных циклов, однако, для каждого второго pPiece [] я хочу дать ему ак атрибут 0 или 1 каждый второй pPiece [] соответственноЗаполнение массива внутри вложенных циклов

Например -

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.... 

Что я имею

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

Действовать таким образом результаты в pPieces [] индексы, которые в течение записанных 4 раза, я думаю. Возможно ли правильно заполнить этот массив, который должен иметь 8 объектов, хранящихся в нем, с каждой секундой «k», равной 0 или 1 соответственно?

ответ

2

Проблема в вашем текущем решении, что j+k получит то же значение несколько раз в течение двух циклов:

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

Например, когда j = 0 и k = 1, вы будете иметь j + k = 1. Но у вас также будет это, когда j = 1 и k = 0.

Проблема возникает из-за того, что вы увеличиваете переменную j с шагом 1, когда вы должны увеличивать ее с шагом pcCount; и связанная с этим проблема заключается в том, что j должен перейти на pCount*pcCount, а не pCount.

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

В качестве побочного сведению, рассмотреть возможность использования более описательные имена переменных вместо pCount и pcCount.

+0

я сделал это, и это только заполнение мой массив с 2 шт объекты вместо 4. Я сделал петлю, чтобы пройти через pPieces.length и печати и только 2 пятна были заполнены. Я изменил "(alloc());" к "(j + k));" btw – danielb

+0

да, что получил его, чтобы добавить 4 спасибо. Ответ на этот ответ и ответы @Geeth Lochana верны.Спасибо – danielb

0

Действительно, j + k будет перекрываться. Но 2j + k нет. Вам необходимо заменить на:

частная деталь pPieces [] = новая деталь [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

Рефакторинг кода следующим образом, вопросы является pPieces[j+k] = new Piece(k,pcName,1);

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

исправленный код

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

, который сработал, спасибо – danielb

0

Оператор % может быть полезным здесь:

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

Оператор % (модуль) возвращает остальную часть целочисленного деления.

например.

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

Создание чередование 1 и 0

+0

Это предназначено, чтобы всегда заполнить мой массив pPieces []. Я не хочу, чтобы это произошло. Но хорошая идея! – danielb

+0

@ danielb Разве это не была цель? _ «Возможно ли правильно заполнить этот массив, который должен содержать в нем 8 объектов ...» _ –

+0

да, я бы хотел, чтобы он был заполнен, но не безоговорочно. Ваша идея верна в том случае, когда я всегда хотел, чтобы она была заполнена. Извините, я не думаю, что я объяснил это достаточно ясно – danielb

Смежные вопросы