2014-10-19 55 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