我已经看过很多for循环的例子,我无法弄清楚为什么我的工作不起作用。在我的程序中有一个组件,查看器和一个构建类。我设置了它,所以当你在组件中创建一个新的建筑时,你输入x-pos,y-pos和#of levels。我想运行for循环来创建每个级别,但它不起作用。请帮助和谢谢。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
public class Building
{
/**number of levels the building has*/
private int levels;
private int xLeft;
private int yTop;
private int lvls;
/**
* Constructor for objects of class Building
*
* @param x x-Coordinate
*
* @param y y-Coordinate
*
* @param levels The number of thevels the building will have
*/
public Building(int x, int y, int lvls)
{
xLeft = x;
yTop = y;
levels = lvls;
}
/**
* Draws the building
*
* @param g2 graphics contex
*/
public void draw(Graphics2D g2)
{
/**creates one building level*/
Rectangle body = new Rectangle(xLeft/*X*/, yTop/*Y*/, 100/*Width*/, 100/*Height*/);
/**creates window inside of building level*/
Rectangle window = new Rectangle(xLeft+25, yTop+25, 50, 50);
g2.setColor(Color.DARK_GRAY);
g2.fill(body);
g2.setColor(Color.ORANGE);
g2.fill(window);
/**Creates (levels) number of levels*/
for(int i = 1; i<=levels; i++)
{
/**Adds 100 to y value of body*/
body.setLocation(xLeft, yTop-100);
g2.setColor(Color.DARK_GRAY);
g2.fill(body);
window.setLocation(xLeft+25, yTop-75);
g2.setColor(Color.ORANGE);
g2.fill(window);
}
}
}
答案 0 :(得分:2)
每次循环运行时,你需要在for循环中使用i
的值乘以你从yTop
减去的值。现在,您总是从100
中减去yTop
,如下所示:
body.setLocation(xLeft, yTop-100);
问题在于,每次循环运行时,您都要将位置设置为xLeft
的值和yTop - 100
的值,这意味着您基本上将所有级别放在顶部彼此。幸运的是,我们有i
的值,每次循环运行时增加1。因此,我们可以将100
乘以yTop
乘以i
,如下所示:
body.setLocation(xLeft, yTop-(100*i));
现在,在循环的第一次运行中,i
将为1
。 100*1
为100
,因此100
将从yTop
中减去i
。在循环的第二次运行中,2
将增加到100*2
。 200
为200
,因此yTop
将从window.setLocation(xLeft+25, yTop-75);
中减去window.setLocation(xLeft+25, yTop-(75*i));
。看看我要去哪里?
对于Windows来说,这是一个类似的想法。现在,您将所有窗口重叠在一起。如果你改变:
window.setLocation(xLeft+25, yTop-(100*i)+25);
为:
{{1}}
窗户将不再重叠。
然而,窗口放置代码带来了一个新问题。因为等级的高度增加了100,而窗户的高度只增加了75,所以最终你将拥有一次重叠两个等级的窗口。运行程序时,您将看到我的意思。 (在没有窗户的建筑物顶部会有很大的间隙)要解决这个问题,你需要先将窗户高度增加到与水平面相同的高度,然后将窗口偏移25,将其置于水平的中心。
这应该对你更好:
{{1}}
我希望这有帮助!