For循环在其他for循环中
For loop inside other for loop
我有一个这样的字符串数组:
one
twoo
three
four
five
six
seven
eight
nine
对于每 3 个元素,我想为该元素创建一个新的对象设置字段。例如:
one
twoo
three
将像这样使用:
obj.setOne("one");
obj.setTwoo("twoo");
obj.setThree("three");
我想我必须在另一个内部使用一个,但我不知道如何。
我试过这样但结果不好:
ArrayList<MyClass> myobjects;
MyClass my_object = new MyClass();
for (int z = 0; z < myarray.size(); z++) {
for (z = 0; z < (z + 3) && z < myarray.size(); i++) {
if (i == 0) {
mipartido.setAttributeOne(datos.get(i));
}
else if (i == 1) {
mipartido.setAttributteTwoo(datos.get(i));
}
else if (i == 2) {
mipartido.setAttributeThree(datos.get(i));
}
myobjects.add(mipartido);
}
}
最简单的方法是使用一个循环,但迭代 3 次:
for (int i = 0; i < myarray.size() - 2; i+=3) {
mipartido.setAttributeOne(myarray.get(i));
mipartido.setAttributeTwoo(myarray.get(i+1));
mipartido.setAttributeThree(myarray.get(i+2));
}
仅供参考:数字 2 的英文单词拼写为 "two"。
如果您确定 myarray 的大小始终等于 x*3,您应该尝试只使用一个循环 3 次迭代。
MyClass mipartido;
for (z=0; z< myarray.size(); z+=3){
然后在每次迭代开始时,您必须重新创建一个新的 mipartido 对象(但在循环之前声明它)
mipartido = new MyClass();
mipartido.setAttributeOne(datos.get(i));
mipartido.setAttributteTwoo(datos.get(i+1));
mipartido.setAttributeThree(datos.get(i+2));
myobjects.add(mipartido);
}
通过使用它,您的 ArrayList 应该填充了 3 个 mipartido 对象,所有对象都不同。
但请记住,您的 "myarray" 大小必须是 3 的倍数。
我真的很喜欢 , but I wanted to suggest an alternative using the Modulus operator(我认为 OP 在最初的 post 中是想要的)。
for (int i = 0; i < myarray.size(); i++) {
switch (i % 3) {
case 0:
mipartido.setAttributeOne(myarray.get(i));
case 1:
mipartido.setAttributeTwo(myarray.get(i));
case 2:
mipartido.setAttributeThree(myarray.get(i));
}
}
您可以这样做,这样您的 for 循环仍然每次递增 1,但您交替调用方法。正如所解释的那样 here,操作员只需得到余数。
因此,随着递增,switch 语句将像这样工作:
0 % 3 = 0
、1 % 3 = 1
、2 % 3 = 2
、3 % 3 = 0
等
我有一个这样的字符串数组:
one
twoo
three
four
five
six
seven
eight
nine
对于每 3 个元素,我想为该元素创建一个新的对象设置字段。例如:
one
twoo
three
将像这样使用:
obj.setOne("one");
obj.setTwoo("twoo");
obj.setThree("three");
我想我必须在另一个内部使用一个,但我不知道如何。
我试过这样但结果不好:
ArrayList<MyClass> myobjects;
MyClass my_object = new MyClass();
for (int z = 0; z < myarray.size(); z++) {
for (z = 0; z < (z + 3) && z < myarray.size(); i++) {
if (i == 0) {
mipartido.setAttributeOne(datos.get(i));
}
else if (i == 1) {
mipartido.setAttributteTwoo(datos.get(i));
}
else if (i == 2) {
mipartido.setAttributeThree(datos.get(i));
}
myobjects.add(mipartido);
}
}
最简单的方法是使用一个循环,但迭代 3 次:
for (int i = 0; i < myarray.size() - 2; i+=3) {
mipartido.setAttributeOne(myarray.get(i));
mipartido.setAttributeTwoo(myarray.get(i+1));
mipartido.setAttributeThree(myarray.get(i+2));
}
仅供参考:数字 2 的英文单词拼写为 "two"。
如果您确定 myarray 的大小始终等于 x*3,您应该尝试只使用一个循环 3 次迭代。
MyClass mipartido;
for (z=0; z< myarray.size(); z+=3){
然后在每次迭代开始时,您必须重新创建一个新的 mipartido 对象(但在循环之前声明它)
mipartido = new MyClass();
mipartido.setAttributeOne(datos.get(i));
mipartido.setAttributteTwoo(datos.get(i+1));
mipartido.setAttributeThree(datos.get(i+2));
myobjects.add(mipartido);
}
通过使用它,您的 ArrayList 应该填充了 3 个 mipartido 对象,所有对象都不同。 但请记住,您的 "myarray" 大小必须是 3 的倍数。
我真的很喜欢
for (int i = 0; i < myarray.size(); i++) {
switch (i % 3) {
case 0:
mipartido.setAttributeOne(myarray.get(i));
case 1:
mipartido.setAttributeTwo(myarray.get(i));
case 2:
mipartido.setAttributeThree(myarray.get(i));
}
}
您可以这样做,这样您的 for 循环仍然每次递增 1,但您交替调用方法。正如所解释的那样 here,操作员只需得到余数。
因此,随着递增,switch 语句将像这样工作:
0 % 3 = 0
、1 % 3 = 1
、2 % 3 = 2
、3 % 3 = 0
等