2011-12-05 56 views
1

我在電腦SCI AP我,我想不通這是爲什麼不工作的Java畫圖X =位置做別的做到這一點

public static void moon(Graphics g) { 
    for(int k = 0; k < 550; k+=2) { 
     if (k == 550) {  
      g.setColor(Color.blue); 
      g.fillOval(k,50,50,50); 
      for(long delay = 1; delay<10000000; delay++); 
      g.setColor(Color.white); 
      g.fillOval(k,50,50,50); 
      k = 0; 
     } else { 
      g.setColor(Color.black); 
      g.fillOval(k,50,50,50); 
      for(long delay = 1; delay<10000000; delay++); 
      g.setColor(Color.white); 
      g.fillOval(k,50,50,50); 
     } 
    } 
} 

所以基本上是會使黑色橢圓形動在屏幕上,然後當k = 550時,它會使藍色的屏幕穿過屏幕..但它並沒有這樣做,它只是移動黑色的然後它擊中550停止..而藍色的不會來向上。

+1

爲了您和我們的緣故,請以一致且合乎邏輯的方式縮進代碼塊。更有意義的屬性名稱也不會傷害。 –

+1

'for(long delay = 1; delay <10000000; delay ++);'最有可能被優化出來。這完全是定製繪畫的錯誤方法。有關工作示例,請參閱Java教程的[自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/)課程。 –

回答

0

你的代碼永遠不會到達K = 550
for條件循環是k < 550。使它k <= 550它應該工作。

但是,您可能不會看到它發生,因爲您使用for(long delay = 1; delay<10000000; delay++);來延遲 - 這不是一個非常可靠的延遲方式。

要更可靠地看到事情發生,請嘗試使用Thread.sleep(long)
爲了記錄,我相信有一些反對總體上使用Thread.sleep(long)的觀點,但在這種情況下它應該就足夠了。

雖然我在這裏,k = 0任務是多餘的,它甚至是不好的風格。你不應該分配給內部的循環變量。如果再次進入循環,則for (int k=0部分會照顧設定k的0

HTH

+0

這一個工程,但它不去藍色它仍然顯示相同的黑色。 –

+0

我已經更新了我的答案以反映這一點。 –

3

你將永遠進入其他路徑,因爲你的循環次數從0到549,所以k將永遠不等於550

+0

另外我認爲python應該被修改,所以人們被迫做適當的縮進。 – Chris

+0

自動縮進按鈕將是一個更好的主意...... oooops,而不是蟒蛇:) –

0
for(int k = 0; k < 550; k+=2) 

將循環,但k將不與550的值,使你的if語句將進入循環不是在所有

使用本

for(int k = 0; k <= 550; k+=2) 
+0

這一個工程,但它不去藍色它仍然顯示相同的黑色。 –

0

k決不會550被執行,因爲你的表情是k < 550

要麼將​​其更改爲k <= 550,要麼將550部分完全移到循環的外部。

IMO它並不真正屬於循環,如果它只發生一次而另一個n百倍它不。更好的是讓所有其他的內部循環,以及一個永久運行而不是修改循環變量的外部循環。

+0

這一個工程,但它不去藍色它仍然顯示相同的黑色。 –