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