如何在循环外使用在 for 循环内声明的变量?
How do I use a variable that is declared inside of a for loop outside the loop?
我正在创建 ATARI BREAKOUT,使用 acm.graphics
库,我试图访问我的 for 循环之外的 "brick" 以删除它。如果没有 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);
}
}
我猜你想在 for 循环中创建很多砖块。
你做错了,每次迭代你只是改变一块砖的位置。
您需要在每次迭代中创建一个新的砖块并将其引用保存到某个结构中,最好是 [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]);
}
}
这样您就可以拥有全局的积木矩阵,您可以从中删除任何条目。
我正在创建 ATARI BREAKOUT,使用 acm.graphics
库,我试图访问我的 for 循环之外的 "brick" 以删除它。如果没有 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);
}
}
我猜你想在 for 循环中创建很多砖块。
你做错了,每次迭代你只是改变一块砖的位置。 您需要在每次迭代中创建一个新的砖块并将其引用保存到某个结构中,最好是 [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]);
}
}
这样您就可以拥有全局的积木矩阵,您可以从中删除任何条目。