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 = 01 % 3 = 12 % 3 = 23 % 3 = 0