防止增量

时间:2012-10-27 02:11:36

标签: java

我手边有一个微不足道的问题。所以我试图阻止我的计数器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?
        }
    }
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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循环是没有意义的。

答案 2 :(得分: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?
    }
}