2014-10-07 28 views
-1

我正在尝试遍历下面的伪代码设置,并且我似乎只能使用for循环和case区分。有没有简单的方法来通过这些?Java - 遍历不同数组长度的3个变量

编辑:为了更清楚起见,我给出了两个二维双坐标数组,给出了PunkteX [i] [m]和PunkteY [i] [m]。这两个数组的长度将始终相同,但整数i和m是可变的。我想通过它们循环,以便将它们组合成类型为Point2D [p]的新2维数组。 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]); 

我的企图,为了完整起见,这似乎只对我的工作= 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; }}}} 
+0

你会更好地解释你试图在这个伪代码中实现什么 - 这是不明显的你想要做什么。 – 2014-10-07 16:10:34

+0

是的,这很混乱。我不知道你要在这里做什么。你有一个数据结构,你正试图通过它吗?或者你是否试图创建一个数据结构并浏览它? – sage88 2014-10-07 16:10:58

+0

另外还应该补充说,由于事实不清楚,它有可能被关闭。 – 2014-10-07 16:12:33

回答

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的双重坐标数组。这段代码将把你的两个数组循环遍历它们,并将它们存储在Point2Drray中,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中的变量名前使用大写字母,这使得它们看起来像类名。良好的代码规范将使人们更容易帮助你,因为它会更易于阅读。

+0

感谢您提供一个实际的例子,特别是额外的输入!我仍然需要以某种方式看待并潜在地纳入所有想法,但这非常有帮助。 – Denor 2014-10-07 17:46:09

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++; 

     } 
    } 

} 
0

这个怎么样

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

    m--; 
}