Java - 迭代3个不同数组长度的变量

时间:2014-10-07 16:00:10

标签: java loops iteration

我正在尝试迭代以下伪代码设置,我似乎只是使用for循环和大小写区别。有没有简单的方法来解决这些问题?

编辑:为了更清楚,我有两个二维双坐标数组,我有PunkteX [i] [m]和PunkteY [i] [m]。这两个数组的长度始终相同,但整数i和m是可变的。我想循环遍历它们,以便将它们组合成一个新的Point2D [p]类型的二维数组。 Point2D数组的长度将由i和m确定。

int i = punkteX.length; // same as punkteY.length;
int m = punkteX[0].length;  // same as punkteY[0].length;
Point2D[] array = new Point2D[i*m];

array[0] = (punkteX[0][m], punkteY[0][m]);
array[1] = (punkteX[1][m], punkteY[1][m]);    
array[2] = (punkteX[2][m], punkteY[2][m]);
.
.
array[i-1] = (punkteX[i-1][m], punkteY[i-1][m]);
array[i]   = (punkteX[i][m], punkteY[i][m]);
array[i+1] = (punkteX[0][m-1], punkteY[0][m-1]);
array[i+2] = (punkteX[1][m-1], punkteY[1][m-1]);
array[i+3] = (punkteX[2][m-1], punkteY[2][m-1]);
.
.
array[p-1] = (punkteX[i-1][0], punkteY[i-1][0]);
array[p] = (punkteX[i][0], punkteY[i][0]);

为了完整起见,我的尝试似乎只对i = 3起作用如下:

    for (int p = 0; p < array.length; ++p) {
        for (int m = 0; m < mtimes; ++m) { // mtimes = column length of PointX and PointY Arrays
        Point2D[] interimarray = new Point2D[n]; // Global var n = i
        for (int i = 0; i < interimarray.length; ++i) {
            p = (p+i); 
            if (i == (interimarray.length-1)) { p -= 1; }
            if (p < (array.length)) {
                array[p] = new Point2D(xArray[i][(mtimes-m-1)], yArray[i][(mtimes-m-1)]);}
            if ((p!= 0) && (i==(n-1))) { p += 1; }}}}

3 个答案:

答案 0 :(得分:1)

这对我来说仍然很混乱,但这会生成您正在寻找的配置。 p索引总是随着每次迭代通过i数组而增加,所以你可以在那个循环中做p ++。除此之外,它只是一个嵌套的for循环。

int p = 0;
for(int m = mArray.length - 1; m >= 0; m--) {
    for(int i = 0; i < iArray.length; i++) {
        System.out.println("p = " + p + ", i = " + i + ", m = " + m);
        p++;
    }
}

如果您正在努力解决如何存储新数据结构的问题,那么您可能希望使用的是包装类。包装器类将保存punkteX和punkteY的两个双坐标数组。这段代码将带你的两个数组,循环遍历它们,并将它们存储在point2DArray中,它是Point2D类型,我们的包装类。我还提供了一个示例包装类,以便您了解数据的存储方式。

int mArrayLength = punkteX[0].length;
int iArrayLength = punkteX.length;
Point2D[] point2DArray = new Point2D[mArrayLength];
int p = 0;
for(int m = 0; m < mArrayLength; m++) {
    for(int i = 0; i < iArrayLength; i++) {
        point2DArray[p] = new Point2D(punkteX[i][m], punkteY[i][m]);
        p++;
    }
}

public class Point2D {
    private double[] punkteX;
    private double[] punkteY;

    public Point2D(double[] punkteX, double[] punkteY) {
        this.punkteX = punkteX;
        this.punkteY = punkteY;
    }

    public double[] getPunkteX() {
        return punkteX;
    }

    public double[] getPunkteY() {
        return punkteY;
    }
}

然后,如果你想得到一个特定的punkteX和punkteY(比如说p = 0),你就可以在新的数据结构中使用它了:

double[] punkteXValue = point2DArray[0].getPunkteX();
double[] punkteYValue = point2DArray[0].getPunkteY();

除此之外:不要在Java中使用变量名称前面的大写字母,这使它们看起来像类名。良好的代码约定将使人们更有可能帮助您,因为它更容易阅读。

答案 1 :(得分:0)

这是我的解决方案:

public class Test {

    private final static int P = 20;
    private final static int M = 4;

    public static void main(String[] args) {

        int m = 5;
        int i = 0;

        for (int p=0; p < P; p++)
        {
            if (p % M == 0)
            {
                m--;
                i = 0;
            }
            System.out.println ("p = " + p +" i = " + i  +" m = " + m );
            i++;

        }
    }

}

答案 2 :(得分:0)

这个怎么样

int m = mtimes;
int p = 0;
while (m >= 0) {
    int itimes = ...; //row length;
    for (int i = 0; i < itimes; i++) {
        // 
        p++;
    }

    m--;
}