Java 在二维数组中循环(对角)?

Java 在二维数组中循环(对角)?,java,arrays,eclipse,loops,for-loop,Java,Arrays,Eclipse,Loops,For Loop,我有一个6x6数组,希望始终获得接下来的四个值。 例如: 0----- -1---- --2--- ---3-- ----4- 所以我想得到(0+1+2+3)和(1+2+3+4)的和,这是所有对角线的和 我尝试了一些东西,但不幸的是我只得到了第一条对角线(从左上角,楼下): 我现在想要的是: 我想得到: (A、H、O、V) (H、O、V、3) (O、V、3、11) (C,J,Q,X) (B、I、p、W) (I、p、W、4) 对于从按钮到楼上的所有对角线也是一样的。如果数组是正方形,请尝试以下方

我有一个6x6数组,希望始终获得接下来的四个值。 例如:

0-----
-1----
--2---
---3--
----4-
所以我想得到(0+1+2+3)和(1+2+3+4)的和,这是所有对角线的和

我尝试了一些东西,但不幸的是我只得到了第一条对角线(从左上角,楼下):

我现在想要的是:

我想得到:

(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]);
}

对于(inti=0;i你的矩阵indeces是00,11,22,33,那么你需要这样的东西

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

for(inti=0;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);
int表[];
公共整数对角和(整数索引、整数最大值、布尔向下){

如果(indexfor循环语句中似乎有问题,如果您尝试运行此循环并打印j和i的值,您将看到这些对类似于这样

  • 40
  • 30
  • 20
  • 10
  • 0 0
  • 4.1
  • 3.1等等
因此,无论何时尝试访问
数组[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];}  
(i=0;i<4;i++)的
{
s1=s1+数组[i][i];
s2=s2+数组[i+1][i+1];
s3=s3+数组[i+2][i+2];}
试试这样的。 循环进行3圈,因为对于6*6数组,如果从0,0开始向下,则4个连续元素对角线的数量为3。 s1、s2、s3用于保存每个回合的总和。
希望有帮助。

以下是我如何解决这个问题的方法

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

所以你想要从左上角到右下角的总和?每次乘以4?结果应该是什么?刚刚编辑了我的问题,添加了另一个例子。但也添加了11、22、33、44。还有01、12、34、45和12、23、34和45等等。@Ajlex然后你必须重新表述你的问题,让它变得易懂。
char getValue(int row, int col)
{
   // add code here to range check the row and col
   return this.myArray[row, col];
}
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;
      }
   }
}
char values[] = getValues(0, 0, False);