簡體   English   中英

遍歷2D數組(對角線)?

[英]Looping through a 2D array (diagonal)?

我有一個6x6數組,想始終獲取下一個四個值。 舉個例子:

0-----
-1----
--2---
---3--
----4-

所以我想得到所有對角線的(0 + 1 + 2 + 3)和(1 + 2 + 3 + 4)的總和。

我嘗試了一些東西,但不幸的是,我只得到了第一個對角線(從左上角到樓下):

for (int i = 0; i < 3; i++) {
            for (int j = 4; j >= 0; j--) {
                    dosomething..(array[j][i]);
                    dosomething..(array[i + 1][j + 1]);
                    dosomething..(array[i + 2][j + 2]);
                    dosomething..(array[i + 3][j + 3]);
            }
        }

另外,我還需要獲取所有對角線的下四個值,這也來自對角向上角,而且我不知道如何制作。

編輯:這是另一個示例:

A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 1 2 3 4
6 7 8 9 10 11

我現在想要的是以下內容:

我想得到:

(A,H,O,V)

(H,O,V,3)

(O,V,3,11)

(C,J,Q,X)

(B,I,P,W)

(I,P,W,4)

對於所有從樓上的對角線延伸的對角線也是如此。

如果數組是正方形,請嘗試以下操作:

for (int i=0; i<array[0].length; i++) {
    dosomething..(array[i][i]);
}

在數組不是正方形的情況下:

int i=0;
while (i<Math.min(array[0].length,array.length)) {
    System.out.println(array[i][i]);
    i++;
}

您的矩陣獨立數是00、11、22、33,那么您需要這樣的東西

for (int i=0; i<array[0].length; i++) {
    dosomething..(array[i][i]);
}

這是一個示例代碼,僅用於說明算法。 我不是Java開發人員,因此您應該修復與該語言相關的一些問題。

int table[][];

public int diagonalSum(int index, int max, bool down) {
    if (index <= max) {
        int nextIndex = index + (down ? -1 : 1);
        return table[index][index] + diagonalSum(nextIndex, max, down);
    }
}

int firstDown = diagonalSum(0, table.length, true);
int secondDown = diagonalSum(1, table.length, true);

int firstUp = diagonalSum(table.length, table.length, false);

在for循環語句中似乎存在問題,如果嘗試運行此循環並打印j和i的值,您將看到這些對是類似這樣的。

  • 4 0
  • 3 0
  • 2 0
  • 1 0
  • 0 0
  • 4 1
  • 3 1等等。

因此,每當嘗試訪問array[j][i] ,都不會得到對角線元素。 使用對角元素的i和j值相同的事實。

    for (i = 0; i < 4; i++) {
                s1=s1+array[i][i];
                s2=s2+array[i + 1][i + 1];
                s3=s3+array[i + 2][i + 2];}  

嘗試這樣的事情。 循環進行3圈,因為對於6 * 6數組,如果從0,0開始向下,則4個連續元素對角線的數量為3。 s1,s2,s3用於保存每轉的總和。 希望能幫助到你。

這是我如何解決問題的方法。

我將問題分為兩部分。 首先是從數組中獲取一個值。 第二個是循環4次以遞增順序獲取值。

第1部分從數組中獲取值。

char getValue(int row, int col)
{
   // add code here to range check the row and col
   return this.myArray[row, col];
}

第2部分循環4次以按升序或降序獲得值。

char[] getValues(int startRow, int startCol, boolean goUp)
{
   char[] values = new int[4];
   int row = startRow; 
   int col = startCol;
   // get the 4 values
   for (i = 0; i < values.length(); i++)
   {
      values[i] = getValue(row, col);
      // check if going upstairs or downstairs
      if (goUp)
      {
         row = row + 1;
         col = col + 1;
      }
      else
      {
         row = row - 1;
         col = col - 1;
      }
   }
}

現在,獲取值很簡單。 只需使用起始行和列調用getValues()。

例如:

char values[] = getValues(0, 0, False);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM