通过2D阵列(对角线)循环?

时间:2016-03-12 15:41:24

标签: java arrays eclipse loops for-loop

我有一个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]);
            }
        }

此外,我需要为所有对角线获取接下来的四个值,这些值也来自buttom upstaris,我不知道如何制作它...

编辑:这是另一个例子:

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)

对于从楼上的臀部出来的所有对角线都是一样的。

5 个答案:

答案 0 :(得分:2)

如果数组为正方形,请尝试此操作:

less

如果数组不是正方形,那么这就是

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

答案 1 :(得分:1)

你的矩阵对象是00,11,22,33,那么你需要类似的东西

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

答案 2 :(得分:1)

这是一个示例代码,仅用于说明算法。 我不是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);

答案 3 :(得分:1)

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)

这是我如何处理这个问题。

我会将问题分成两部分。第一种是从数组中获取值。第二种是循环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);