Java 如何使用嵌套for循环构建brick pryramid
我正在解决一个我有很多麻烦的问题。问题的概念是用砖块建造金字塔。整个砖块金字塔位于窗口的中心。我可以画一块砖,然后画两块,然后画三块,一直画到12块,这就是金字塔的底部,但是所有的砖都在窗口左侧的左边对齐,而不是在窗口中居中Java 如何使用嵌套for循环构建brick pryramid,java,Java,我正在解决一个我有很多麻烦的问题。问题的概念是用砖块建造金字塔。整个砖块金字塔位于窗口的中心。我可以画一块砖,然后画两块,然后画三块,一直画到12块,这就是金字塔的底部,但是所有的砖都在窗口左侧的左边对齐,而不是在窗口中居中 使用getWidth()和getHeight()我可以做(getWidth()-BRICK\u WIDTH)/2;以获取砖的x坐标的中心。然后(getHeight()-BRICK\u HEIGHT)/2;用于一块砖的y坐标中心。唯一的问题是我不知道在哪里输入代码,所以它适用
使用getWidth()和getHeight()我可以做(getWidth()-BRICK\u WIDTH)/2;以获取砖的x坐标的中心。然后(getHeight()-BRICK\u HEIGHT)/2;用于一块砖的y坐标中心。唯一的问题是我不知道在哪里输入代码,所以它适用于所有的砖块,所以每行砖块都在窗口的中心
import acm.program.*;
import acm.graphics.*;
public class Pyramid extends GraphicsProgram {
public void run() {
double xCoordinate = (getWidth() - BRICKWIDTH) / 2;
double yCoordinate = (getHeight() - BRICK_HEIGHT / 2);
for (int i = 0; i < BRICKS_IN_BASE; i++) {
for (int j = 0; j < i; j++) {
double x = j * BRICK_WIDTH;
double y = i * BRICK_HEIGHT;
GRect square = new GRect(x, y, BRICK_WIDTH, BRICK_HEIGHT);
add(square);
}
}
}
private static final int BRICK_WIDTH = 50;
private static final int BRICK_HEIGHT = 25;
private static final int BRICKS_IN_BASE = 12;
}
导入acm.program.*;
导入acm图形。*;
公共类金字塔扩展图形程序{
公开募捐{
双xCoordinate=(getWidth()-BRICKWIDTH)/2;
双Y坐标=(getHeight()-BRICK_HEIGHT/2);
for(int i=0;i
你是说这样的吗
double x = xCoordinate + j * BRICK_WIDTH;
double y = yCoordinate + i * BRICK_HEIGHT;
您应该尝试以下方法:
import acm.program.*;
import acm.graphics.*;
public class Pyramid extends GraphicsProgram
{
public void run()
{
// We calculate some values in order to center the pyramid vertically
int pyramidHeight = BRICKS_IN_BASE * BRICK_HEIGHT;
double pyramidY = (getHeight() - pyramidHeight) / 2;
// For each brick layer...
for (int i=BRICKS_IN_BASE ; i >= 1; i--)
{
// We calculate some values in order to center the layer horizontally
int layerWidth = BRICKWIDTH * i;
double layerX = (getWidth() - layerWidth) / 2;
double layerY = pyramidY + (i-1) * BRICK_HEIGHT;
// For each brick in the layer...
for(int j=0 ; j<i ; j++)
{
GRect square = new GRect(layerX + j*BRICK_WIDTH, layerY, BRICK_WIDTH, BRICK_HEIGHT);
add(square);
}
}
}
private static final int BRICK_WIDTH = 50;
private static final int BRICK_HEIGHT = 25;
private static final int BRICKS_IN_BASE = 12;
}
导入acm.program.*;
导入acm图形。*;
公共类金字塔扩展图形程序
{
公开募捐
{
//为了使金字塔垂直居中,我们计算了一些值
int棱锥体高度=底部的砖块高度*砖块高度;
双金字塔=(getHeight()-pyramidHeight)/2;
//对于每个砖层。。。
对于(int i=BRICKS\u IN_BASE;i>=1;i--)
{
//我们计算一些值以使层水平居中
int layerWidth=砖宽*i;
双层x=(getWidth()-layerWidth)/2;
双层=金字塔+(i-1)*砖块高度;
//对于层中的每个砖。。。
对于(int j=0;jI刚刚尝试了你的代码,它工作正常。它绘制的图片与我应该绘制的完全相同。唯一的问题是它应该在窗口中居中,而不是坐在地上。我将对其进行编辑以解决此问题,我没有阅读它,它也应该垂直居中。谢谢。我必须仔细查看此示例才能完全理解我有一个简单的问题。int-pyramidHeight=BRICK_IN_BASE*BRICK_HEIGHT是怎么回事?这不只是计算当前一行砖的高度吗?一行砖的高度与单个砖的高度相同,因为砖在一层中水平对齐。因此,全局金字塔高度包含在一层的高度(BRICK_HEIGHT)中乘以金字塔中的层数(底部的砖块)。这就是为什么我们有金字塔高度=底部的砖块*底部的砖块高度