我正在尝试迭代以下伪代码设置,我似乎只是使用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; }}}}
答案 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--;
}