我一直在对数组进行for
的实验,并试图使用数组迭代。为什么这两个代码没有做完全相同的事情?第一个效果很好,第二个效果是我试图使其看起来更干净。
/**
* resetSelectionOn
*
* Module permettant de reinitiliser la selection d'une case et de supprimer
* le groupe dont elle fait partie
*
* @param emplacement
*/
public void resetSelectionOn(int emplacement) {
int group = groupID[emplacement];
for (int i = 0; i < groupID.length; i++) {
if (groupID[i] == group) {
groupID[i] = 99;
selected[i] = false;
}
}
for(int i = 0; i < groupID.length; i++) {
if (groupID[i] > group) {
groupID[i]--;
}
}
**// This is the one that isn't working and is suppose to do the exact same thing as the one right over**
for ( int i : groupID) {
if(i > group)
i--;
}*/
listeGroupCree.remove(group);
selected[emplacement] = false;
nbGroupCree--;
}
有人可以向我解释这两个代码之间的区别吗?谢谢!
group是一个选项卡,其中包含数字所在的组的编号。示例:我随机生成6位数字。假设[1] [2] [3] [4] [5] [6] groupID是一个ArrayList,告诉我在巫婆组中当前使用此数字。例如,如果2和3通过成为同一组的一部分来创建数字23(假设2),则此代码是我的代码,用于重置该组的选择。该组引用了它在ListeGroupCree中的位置。如果23是组号2,则ListeGroupCree [2]将返回23
答案 0 :(得分:0)
比较两个片段:
for (int i = 0; i < groups.length; i++) {
groups[i]--;
}
和
for (int g : groups) {
g--;
}
第一段将减少groups
的每个元素。第二段将什么也不做。这是因为第二段等价于
for (int i = 0; i < groups.length; i++) {
int g = groups[i];
g--;
}
因此,您将获得一个新变量,将其递减并丢弃结果。
答案 1 :(得分:0)
要添加,您会注意到其他人指出的相同之处,如果您反编译生成的类文件 注意第一个反编译循环和第二个反编译循环
最适合您的
for(i = 0; i < this.groupID.length; ++i) {
if(this.groupID[i] > group) {
--this.groupID[i];
}
}
不适用于您的人
int[] var7 = this.groupID;
int var4 = var7.length;
for(int var5 = 0; var5 < var4; ++var5) {
int i = var7[var5];
if(i > group) {
--i;
}
}
如果您注意到,第一个正在处理数组引用。 第二个只是修改原始值。
答案 2 :(得分:0)
for (int i: array) {
i++;
}
在上面的示例中,i
是数组中值之一的本地副本。仅对单次迭代有效。您实质上是在更改副本的值。