2014-10-07 42 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--; 
}