2013-11-02 61 views
0

目的:小程序不重複循環

我有涉及烏龜和兔子之間的競爭分配。基本上,我有兩個.gif文件,一個是烏龜和一個野兔,它們將被顯示在一個applet中,並通過沿着x軸前進而彼此競爭。在這個過程中,我必須使用隨機數生成器來生成不同的「移動」,其中動物(圖像文件)向前或向後移動一定數量的位置。這個循環必須重複,直到其中一個動物達到第50個位置。兩隻動物在每次移動之間也必須有某種時間延遲。

的代碼:

import java.util.Random; 
import java.awt.Graphics; 
import java.applet.Applet; 
import java.awt.Image; 
import java.awt.Color; 

public class ProjectTwo extends Applet 
{ 
    Image tortoise, hare; 
    Random generator = new Random(); 
    int[] positions = new int [50]; 
    int[] randoms = new int[50]; 
    public int t = 0; 
    public int h = 0; 
    public int s = 0; 

    public void init() 
    { 
     for (int i = 0; i < positions.length; i++) 
     { 
      positions[i] = ((i * 145) + 10); 
     } 

     for (int x = 0; x < randoms.length; x++) 
     { 
      randoms[x] = generator.nextInt(6) + 1; 
     } 

     tortoise = getImage(getDocumentBase(), "images/tortoise.gif"); 
     hare = getImage(getDocumentBase(), "images/hare.gif"); 
    } 

    public void delay() 
    { 
     for(int g = 0; g <= 90000000; g++) ; 
    } 

    public void paint (Graphics g) 
    { 
     g.drawImage (tortoise, positions[0], 10, this); 
     g.drawImage (hare, positions[0], 137, this); 
     delay();delay();delay(); 

     do 
     { 
      switch (randoms[s]) 
      { 
       case 1: 
       case 2: 
        t += 3; 
        h += 9; 

        if (t >= 50) 
        { 
         g.drawImage (tortoise, positions[50], 10, this); 
        } 
        else 
        { 
         g.drawImage (tortoise, positions[t], 10, this); 
        } 

        if (h >= 50) 
        { 
         g.drawImage (hare, positions[50], 137, this); 
        } 
        else 
        { 
         g.drawImage (hare, positions[h], 137, this); 
        } 
        s++; 
        break; 

       case 3: 
       case 4: 
       case 5: 
        t += 3; 
        h += 1; 

        if (t >= 50) 
        { 
         g.drawImage (tortoise, positions[50], 10, this); 
        } 
        else 
        { 
         g.drawImage (tortoise, positions[t], 10, this); 
        } 

        if (h >= 50) 
        { 
         g.drawImage (hare, positions[50], 137, this); 
        } 
        else 
        { 
         g.drawImage (hare, positions[h], 137, this); 
        } 
        s++; 
        break; 

       case 6: 
        t += 1; 
        h -= -12; 

        if (t >= 50) 
        { 
         g.drawImage (tortoise, positions[50], 10, this); 
        } 
        else 
        { 
         g.drawImage (tortoise, positions[t], 10, this); 
        } 

        if (h <= 0) 
        { 
         g.drawImage (hare, positions[0], 137, this); 
         t = 0; 
        } 
        else 
        { 
         g.drawImage (hare, positions[h], 137, this); 
        } 
        s++; 
        break; 

       case 7: 
       case 8: 
        t += 1; 
        h -= 2; 

        if (t >= 50) 
        { 
         g.drawImage (tortoise, positions[50], 10, this); 
        } 
        else 
        { 
         g.drawImage (tortoise, positions[t], 10, this); 
        } 

        if (h <= 0) 
        { 
         g.drawImage (hare, positions[0], 137, this); 
         t = 0; 
        } 
        else 
        { 
         g.drawImage (hare, positions[h], 137, this); 
        } 
        s++; 
        break; 

       case 9: 
       case 10: 
        t -= 6; 

        if (t <= 0) 
        { 
         g.drawImage (tortoise, positions[0], 10, this); 
         t = 0; 
        } 
        else 
        { 
         g.drawImage (tortoise, positions[t], 10, this); 
        } 

        g.drawImage (hare, positions[h], 137, this); 
        s++; 
        break; 
      } 
     } while (t >= 50 | h >= 50); 
    } 
} 

預期的結果:

  • 的tortoise.gif文件出現在(10,10)和所述hare.gif文件出現在(10 ,137)
  • 有一個很短的延遲,直到隨機數發生器滾動一個4(這對我來說無論何時/何時創建數字,只要它們處於1- 10)
  • 烏龜前進3個位置(公式位置是145x + 10,使得烏龜的新座標(445,10)
  • 野兔前進1點的位置,使得它的新座標(155,10)
  • 重複過程,直到一個前進到第50位(查看其他信息應該發生什麼,每一個隨機數)

到底發生了什麼

龜兔賽跑他們approp顯示riate的地方,但不要動。

的問題

我想烏龜並根據計時器來推進自己的立場野兔,但在編譯的代碼,並啓動小程序,由於我的代碼某種錯誤後,他們做不。

我想可能是錯誤

我相信問題可能與我是如何實現的延遲做,我在一個陣列中的圖像的x值,或相互衝突的變量使用元素我的do-while循環和/或我的病例陳述,雖然我不知道什麼是錯的,也不知道我應該修復什麼。然而,我現在意識到,如果程序確實起作用,由於我在接近頂端的for循環中使用randoms.length作爲構造函數,烏龜和兔子在停止之前只會改變位置50次,不管怎樣。我也不知道如何解決這個問題。

附加資料

  • 這裏是多遠動物應該根據所選擇的隨機數移動圖表:

    1-2 =龜移動3個位置,兔移動+ 9

    3-5 =烏龜移動+3位置,野兔移動+1

    6 =龜移動1位置,兔移動回到-12

    7-8 =龜移動1位置,兔移回-2

    9-10 =龜移回-6位置,兔完全不動

  • 動物可以移動得比原始位置(位置[0])更遠。如果數字低於這個數字,動物必須停留在那個位置。此規則也適用於大於50的位置。

  • 此代碼編譯正常,但該小程序未按照所嘗試的方式運行。
  • 我很抱歉,如果這段代碼看起來非常混亂,因爲我對Java編碼以及使用小程序相當陌生。

回答

0

看來你應該改變

while (t >= 50 | h >= 50) 

while (t <= 50 | h <= 50) 

因爲T和h都從0開始的,並要循環,而他們是低於或等於50,不而他們高於或等於50.

+0

這聽起來像個好主意。我在我的代碼中實現了它,但情況是一樣的,在小程序中出現了烏龜和兔子,但它們不動。 – user2709168