2014-09-30 13 views
0

我目前正在使用Java的awt類的測試程序。在這個程序中,我試圖在網格的特定象限中生成4個隨機點。Grid程序w/java

在審查我的代碼時,您是否可以提出一個更好的途徑,就組織而言?

我目前只使用一個for循環來顯示4點,就像這樣:

for (int dotsOnGrid = 1; dotsOnGrid < 5; dotsOnGrid++) 
    { 
     int x = (int) (Math.random() * (.50 * width)); 
     int y = (int) (Math.random() * (.50 * height)); 

     g.setColor(Color.RED); 
     g.fillOval(x, y, r, r); 
    } 

至於獲得的4個紅點左上角網格的,我是固體。

我只是無法弄清楚如何產生黃色和綠色的點。如何在使用Math.random()時工作?

在此先感謝您的幫助!

+0

您可能希望隨機獲取所有整個屏幕的座標,並根據您獲得的顏色來選擇顏色。 – StackFlowed 2014-09-30 19:35:57

+1

您知道如何生成0和寬度/ 2之間的隨機數。您需要寬度/ 2和寬度之間的隨機數。你不覺得簡單地增加寬度/ 2會做到嗎? – 2014-09-30 19:37:49

回答

1

做一些簡單的數學,並不難弄清楚。首先找出正方形的座標x範圍,併爲該正方形座標y範圍。在這兩個範圍內做兩個隨機數,這將是你的x,y值。簡單。

+0

感謝幫助! – 2014-09-30 19:49:18

0

只需增加新的欄目爲其他顏色:

for (int numDots = 1; numDots < 5; numDots++) 
{ 
    g.setColor(Color.YELLOW); 

    int x = (int) (Math.random() * (.50 * width)) + (.50 * width); 
    int y = (int) (Math.random() * (.50 * height)); 

    g.fillOval(x, y, r, r); 
} 


for (int numDots = 1; numDots < 5; numDots++) 
{ 
    g.setColor(Color.GREEN); 

    int x = (int) (Math.random() * (.50 * width)); 
    int y = (int) (Math.random() * (.50 * height) + (.50 * height)); 

    g.fillOval(x, y, r, r); 
} 
0

(雖然這氣味像功課:))

只是假設你必須填寫四宮格顏色。對於四個網格中的每個網格,您可以執行相同的代碼。因此,爲一種顏色創建一個網格的函數(這意味着顏色將是一個參數)。然後,一旦有了四個網格,將它們粘貼到一個大網格中。

在僞代碼:

public Grid makeGrid(final Color color) { 
    Grid g = new Grid(); 
    for(numberOfDotsPainted = 0; numberOfDotsPainted < NUMBER_OF_DOTS_TO_BE_PAINTED; ++numberOfDotsPainted) { 
    // choose random spot for the new dot 
    // Create a dot with the given color 
    // Add the new dot to the grid 
    } 
    return g; 
} 

此功能需要在此基礎上顏色需要去的地方,你需要的座標轉換到合適的位置被稱爲對每個顏色,然後。如果將四個網格放在笛卡爾座標系的四個象限上,那麼數學算術很簡單。 (根據網格的寬度,翻譯將存在增加和減少)。

這種方法將避免代碼重複,並且比複製每個部分的小改動複製粘貼相同的代碼更加結構化。每當你需要改變一個小東西到核心功能時,你只需要改變你的代碼的一部分而不是n次(n個顏色的數量)就可以改變。這是非常容易出錯的。

+0

是的,我明白你的意思了。擁有一個代碼塊而不是複製和粘貼n次的代碼要簡單得多。這是我的目標,因爲它可以變得重複。 – 2014-09-30 20:01:36

+0

試試吧,讓我知道它是否有效。 – Juru 2014-09-30 20:04:00

+0

很明顯,儘管這個程序,我的設置方式,點不總是在界限內,意味着在網格內。我將如何根據我之前編寫的代碼解決這個小問題? – 2014-09-30 20:04:53