因此,我想在一个for循环中生成3行茶杯。根据'count'的值,它将显示PImage“ emptyCup”或“ fullCup”。该代码通常可以正常工作,但是行中的图形顺序不是我想要的。
简而言之,这是循环。
int count = 2;
int width = 210;
int length = 180;
for (int i = 1; i <= 3; i++) {
if (i <= 3) {
length = length1;
} else if ((3 <= i) && (i <= 6)) {
length = length2;
} else {
length = length3;
}
if ((i <= count)) {
image(fullCup, (width * (i % 3)), length);
println("FULL CUP: Count = " + count + ", i = " + i);
} else {
println("EMPTY CUP: Count = " + count + ", i = " + i);
image(emptyCup, (width * (i % 3)), length);
}
}
以下内容应为我提供以下输出,其中[o]是满满的杯子,[]是空满的杯子:
[o] [o] [ ]
相反,它给了我这个:
[ ] [o] [o]
同样,如果我将“ count”更改为4,并继续将for循环更改为6,那么我会得到:
[o] [o] [o]
[ ] [o] [ ]
我知道我对模运算符的使用并没有得到我想要的东西,但是我不能将我的手指放在应该说的地方。有什么建议吗?
答案 0 :(得分:1)
希望您现在已经找到答案,但是我还是会回答。
这是由不良的编程习惯引起的错误的经典案例。您可能对此感到陌生,但我并不是说这很不好,但是您可以从中学到;)
首先,“宽度”和“长度”是Processing中的关键字,不应分配它们,而只能读出。
第二,除非有特殊原因,习惯上将for循环从0开始。这是因为计算机的工作方式,并且它使其余代码中的逻辑更容易。例如模数。
这也是您的代码错误。
使用的逻辑没错,但是基于从0开始的for循环。
此代码可满足您的需求。它在x = 0和y = 0处绘制第一张图像。如有必要,可以添加偏移量。
void setup() {
PImage fullCup = loadImage("fullCup.jpg");
PImage emptyCup = loadImage("emptyCup.jpg");
size(800, 800);
int count = 4;
int numberOfCups = 6;
int img_width = 210;
int img_length = 180;
for (int i = 0; i < numberOfCups; i++) {
if (i < count) {
image(fullCup, img_width * (i % 3), img_length*(i/3));
} else {
image(emptyCup, img_width * (i % 3), img_length*(i/3));
}
}
}