我正在研究一种改变代码长度的方法。
我有这个:
rects[1].setLocation(0, 0);
rects[2].setLocation(100, 0);
rects[3].setLocation(200, 0);
rects[4].setLocation(300, 0);
rects[5].setLocation(400, 0);
rects[6].setLocation(500, 0);
rects[7].setLocation(0, 50);
rects[8].setLocation(100, 50);
rects[9].setLocation(200, 50);
rects[10].setLocation(300, 50);
rects[11].setLocation(400, 50);
rects[12].setLocation(500, 50);
rects[13].setLocation(0, 100);
rects[14].setLocation(100, 100);
rects[15].setLocation(200, 100);
rects[16].setLocation(300, 100);
rects[17].setLocation(400, 100);
rects[18].setLocation(500, 100);
rects[19].setLocation(0, 150);
rects[20].setLocation(100, 150);
rects[21].setLocation(200, 150);
rects[22].setLocation(300, 150);
rects[23].setLocation(400, 150);
rects[24].setLocation(500, 150);
我改成这样:
for(int i = 1; i < 25; i++)
{
for(int j = 0; j < 550; j +=50)
{
for(int k = 0; k < 550; k +=50)
{
rects[i].setLocation(j, k);
}
}
}
问题是后者不起作用,尽管它应该起作用。我的问题是,有什么问题?我试过很多方法来解决这个问题,但都不管用。我不得不用谷歌搜索这个问题,因为我不知道问题出在哪里。如果值得注意的话,这也是一个小程序的代码。
7条答案
按热度按时间huus2vyu1#
我想你想要这样的东西:
x0fgdtte2#
试着这样做:
而且,不,我不是一个优化编译器。
huwehgph3#
如果您稍微浏览一下您的代码,就会发现您的代码执行以下操作:
这显然不是你想要的。你只需要设置24个值,所以只有一个循环。您可以使用模运算符来获得适当的值。
一些解释:
模算子描述
原因是什么
(i-1)/6
工作原理是这是整数除法。结果将被截断为整数。例如,11/6 = 1
.wnavrhmk4#
我发现代码中有几个问题可能会给您带来问题:
原始代码显示setlocation函数的第一个参数递增100,而for循环显示它递增50。我原来是你想要的。
整数i、j和k是在它们自己的局部范围内创建的。这意味着一旦您完成'k'for循环,k就会从内存中删除。为了避免这种情况,可以在原始for循环之外创建所有变量。
你不需要所有的嵌套for循环
下面是我要做的:
2ul0zpep5#
你在周旋
j
以及k
每一个价值i
,最终将所有位置设置为(500500)。你应该做的是保持
j
以及k
作为循环外的独立变量(可以调用它们x
,y
)并在每个循环中更新它们,例如。8tntrjer6#
您正在执行最里面的语句241010=2400次。
您应该将其编写为单个循环,并将x和y值计算为序列。
m2xkgtsf7#
循环应如下所示:
您不需要三个嵌套循环,因为您只分配给一个数组。
顺便问一下,您的数组索引
rects
从0开始?