2012-10-27 85 views
-2

我手邊有一些微不足道的問題。所以我試圖阻止我的計數器c增加for循環。只有在空的時候,我纔會在池塘裏填滿一個點。如果它已經裝滿了另一條魚(白色或紅色),我不希望櫃檯增加。一旦池塘中的一個點(或元素)被填滿,它就不能再被填滿。所以最終應該有500只白色魚和5只紅色魚。防止遞增

我感覺好像我在用錯誤的條件語句來解決這個問題。一旦我的計數器增加,我的while語句也會調用方法placeFish,同樣增加白色或紅色計數器,這不是我想要做的。我總是得到總數不是500和5的白色/紅色魚,而是更低,因爲當理想情況下,我不希望他們的時間計數器增加。

我正確使用for語句嗎?我試過,但它似乎也沒有工作。

public static void fishes (int[][] pond) { 
      //pond has dimensions [50][50] in a different method that call fishes 
      //every element in the 2D array pond is already set to value 0 
    int whitefish = 500; 
    int redfish= 5; 
    int whitefishvalue = 1 
    int redfishvalue = 2 
    int white = 0; 
    int red = 0; 
    while (white < whitefish) 
    { 
     placeFish (pond, whitefishvalue); 
     white++; 
    } 
    while (red < redfish) 
    { 
     placeFish (pond redfishvalue); 
     redd++; 
    } 
} 

public static void placeFish(int[][] pond, int newFish) { 
    int a = random.nextInt(pond.length); 
    int b = random.nextInt(pond[0].length); 
      int spot = 0; 

    for (int c = 0; c < 1; c++) 
    { 
     if (pond [a][b] == spot) 
     { 
      pond[a][b] = newFish; 
      c++; 
        //How to stop c++ from incrementing? 
     } 
    } 
} 
+0

您似乎有點不喜歡以這種方式通過循環增加值。你能解釋一下你想要完成什麼嗎? – Makoto

回答

2

我不太確定你想要做什麼,但我認爲這是你想要的...這會隨機通過數組,尋找點搜索,當你發現它會停止一個,然後它把魚放在那裏。

public static void placeFish(int[][] pond, int newFish) { 
    int spot = 0; 
    int a; 
    int b; 

    do 
    { 
     a = random.nextInt(pond.length); 
     b = random.nextInt(pond[0].length); 
    } while (pond [a][b] != spot); 

    pond[a][b] = newFish; 
} 
+0

非常感謝你!這正是我正在尋找的:) – Sozziko

+0

@Sozziko:很高興我能幫上忙。只要記住,不要僅僅因爲它上次工作而編寫代碼,要先計劃你想要做的事情,然後寫出代碼。你的問題是關於「防止遞增」,但你實際上並不需要有一個計數器。祝你好運! – durron597

1
for (int c = 0; c < 1; c++) { 
    if (pond [a][b] == spot) { 
     pond[a][b] = newFish; 
     c++; //How to stop c++ from incrementing? 
    } 
} 

你居然在這個循環中增加c兩次,這我猜是不是你的意思做。第一個地方在第一行。請記住,for循環,一般寫成

for (initialize; condition; increment) { 
    // stuff goes here 
} 

只是相當於while循環

initialize; 
while (condition) { 
    // stuff goes here 
    increment; 
} 

因此,在循環的每個迭代結束時,它會自動遞增c

您增加的另一個地方c位於if聲明的正文中。那隻發生在pond[a][b] == spot。因此,在迭代情況下,您總共增加了兩次c,一次在此if語句中,一次在循環結束時增加一次。

我猜你只想增加一次,當pond[a][b] == spot,而不是其他所有,否則,對吧?如果是這樣,這是一個簡單的解決方法:只需刪除在每次循環迭代結束時運行的遞增語句。

for (int c = 0; c < 1;) { 
    // stuff goes here 
} 

這樣,您只剩下if語句中的一個增量行。


順便說一句,千萬注意,在使用永遠只能有一個迭代for循環沒有意義的。

+0

對不起,我實際上是從內存中寫出代碼,因爲我目前沒有我的筆記本電腦。所以我正在手工完成我的任務,然後將它複製到日食中。 – Sozziko

0

你的措辭很混亂,但我假設你不希望for循環每次增加?

for (int c = 0; c < 1;) //It's not necessary to put an increment there. You can in fact write a loop like for(;;) and escaping it via break 
{ 
    if (pond [a][b] == spot) 
    { 
     pond[a][b] = newFish; 
     c++; 
       //How to stop c++ from incrementing? 
    } 
}