2014-10-19 58 views
-4

我看了很多for循环的例子,我无法弄清楚为什么我的工作不起作用。在我的程序中有一个组件,查看器和一个建筑类。我设置了它,当你在组件中创建一个新的建筑物时,你输入x-pos,y-pos和#层。我想运行for循环来创建每个级别,但它不会工作。请帮助和谢谢。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); 
     } 


    } 

} 
+2

您是否尝试过调试?你将哪个值传递给'levels'成员? – Mephy 2014-10-19 03:04:10

+1

你正在努力成为一名程序员,所以你需要更具体地了解你的状况。你是什​​么意思,它不起作用?!!! 1 – 2014-10-19 03:21:35

+0

由于它不起作用,我的意思是循环内没有任何执行的语句。我试着把一个System.out.println(“测试”);在其中,并没有打印,所以循环没有运行。 – twoface1997 2014-10-19 03:31:28

回答

2

您需要使用您的内部i的价值循环繁殖你是从yTop每次减去哪些循环运行的价值。现在你总是从yTop减去100在这条线是明显的:

body.setLocation(xLeft, yTop-100); 

的问题是,每一个循环运行,您正在设置位置的xLeft的价值和yTop - 100的价值,意义的时间你基本上把所有的关卡放在彼此之上。幸运的是,我们的值为i,每次循环运行时,它都会增加1。因此,我们可以通过i这样乘以100我们从yTop减去:

body.setLocation(xLeft, yTop-(100*i)); 

现在,环路上的第一次运行,i1100*1100,所以100将从yTop中减去。在循环的第二次运行中,i将增加到2100*2200,所以200将从yTop中减去。看看我要去哪里?

对于Windows而言,它是一个类似的想法。现在你将所有窗口重叠在一起。如果你改变:

window.setLocation(xLeft+25, yTop-75); 

到:

window.setLocation(xLeft+25, yTop-(75*i)); 

的Windows将不再重叠。

但是,窗口放置代码带来了一个新问题。因为水平的高度增加了100,而窗户的高度只增加了75,所以最终你将有一次重叠两层的窗口。你会看到我的意思,当你运行该程序。 (在没有窗户的建筑物顶部会有很大的间隙)为了解决这个问题,您需要首先将窗户高度增加与水平高度相同的高度,然后将窗口偏移25以将其放置在关卡的中心。

这应该更好地为您:

window.setLocation(xLeft+25, yTop-(100*i)+25); 

我希望这有助于!

+0

这解决了它。非常感谢。 – twoface1997 2014-10-19 03:45:45

+0

@ twoface1997没问题!很高兴我能帮上忙! :) – 2014-10-19 03:48:27