2016-01-01 2 views
-1

Я создаю ATARI BREAKOUT, используя библиотеку acm.graphics, и я пытаюсь получить доступ к «кирпичу» за пределами цикла for, чтобы удалить его. Я не могу найти другого способа создать кирпичи без цикла for. Помогите?Как использовать переменную, которая объявлена ​​внутри цикла for вне цикла?

GRect brick = new GRect(brickwidth, brickheight); 
    for(j = 1; j <= nrows; j++) { 
     for(i = 0; i < bricksperrow; i++) { 
      brick.setLocation(i*(brickwidth + brickSep) + 1, brickoffset + j*(brickheight + brickSep)); 
      if(j == 1 || j == 2) { 
       brick.setColor(Color.RED); 
       brick.setFilled(true); 
      } 
      else if(j == 3 || j == 4) { 
       brick.setColor(Color.ORANGE); 
       brick.setFilled(true); 
      } 
      else if(j == 5 || j == 6) { 
       brick.setColor(Color.YELLOW); 
       brick.setFilled(true); 
      } 
      else if(j == 7 || j == 8) { 
       brick.setColor(Color.GREEN); 
       brick.setFilled(true); 
      } 
      else if(j == 9 || j == 10) { 
       brick.setColor(Color.CYAN); 
       brick.setFilled(true); 
      } 
      add(brick); 
     } 
    } 
+0

В чем проблема, с которой вы столкнулись? – nullpointer

+0

Где вы добавляете 'кирпич' в? Сохраните ссылку на созданные кирпичи в 'Collection',' List' или 'Map', а затем просто получите их оттуда, чтобы удалить их. –

+0

Кстати, ваша цепочка 'if' может быть легко заменена оператором' switch'. Или вы могли бы значительно упростить условия 'if', если вы не хотите использовать« переключатель ». –

ответ

0

Я думаю, вы хотите создать много кирпичей для цикла.

Вы делаете это неправильно, за итерацию вы просто меняете положение одного кирпича. Вам нужно создать новый кирпич за итерацию и сохранить его ссылку в некоторой структуре, предпочтительно, в матрице размеров [nrows, bricksperrow].

Вот как:

GRect[][] bricks = new GRect[nrows][bricksperrow]; 
for(j = 1; j <= nrows; j++) { 
    for(i = 0; i < bricksperrow; i++) { 
     bricks[j - 1][i].setLocation(
         i*(brickwidth + brickSep) + 1, 
         brickoffset + j*(brickheight + brickSep)); 
     if(j == 1 || j == 2) { 
      brick.setColor(Color.RED); 
      brick.setFilled(true); 
     } 
     else if(j == 3 || j == 4) { 
      brick.setColor(Color.ORANGE); 
      brick.setFilled(true); 
     } 
     else if(j == 5 || j == 6) { 
      brick.setColor(Color.YELLOW); 
      brick.setFilled(true); 
     } 
     else if(j == 7 || j == 8) { 
      brick.setColor(Color.GREEN); 
      brick.setFilled(true); 
     } 
     else if(j == 9 || j == 10) { 
      brick.setColor(Color.CYAN); 
      brick.setFilled(true); 
     } 
     add(bricks[j - 1][i]); 
    } 
} 

Таким образом, вы можете иметь глобальную матрицу кирпича, из которого вы можете удалить любую запись.

+0

Но теперь матрица находится внутри цикла for, и я не могу получить доступ к ней за ее пределами. –

+0

Что мне нужно сделать. –

+0

Это не внутри цикла for. Это может быть переменная экземпляра или переменная public. – nikartix

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