在2D数组中循环通过主对角线(/)以及其下方的单元格

时间:2017-12-10 06:50:24

标签: java arrays multidimensional-array

我试图像这样对角地循环一个(布尔)2D数组:/(不像这个\,因为我已经知道如何做)以及下面的单元格。该方法的目的是通过并将对角线上方和下方的所有单元格(按行 - 主顺序)设置为true。因此,它将从左上角开始,从那里开始向下工作,并且不必触及右下方。

我有沿着对角线走的代码,它只是下面的部分我遇到了困难。这是对角线的代码:

    for (int r = 0; r < min; r++)
    {
        colorArray[r][min-r-1+difference] = true;
        gui.update(colorArray);
    }

这是我的一些代码,用于对角下面的单元格。:

for (int r = 0; r < min; r++)
    {
        colorArray[r][min-r-1+difference] = true;
        for (int i = r; i < rowLength; i++)
        {
            colorArray[i][r] = true;
            gui.update(colorArray);
        }
    }

它输出: https://imgur.com/AXBna8F

输出我看起来应该更像这样: https://imgur.com/okrvFK2

这是我在这里的第一篇帖子,所以如果我的问题需要进一步澄清和编辑,请告诉我。

3 个答案:

答案 0 :(得分:0)

我的假设是(0,0)是左上角。所以你想从右上角(最大,0)开始,向左斜下方做?

试试这个:

// top right corner
int x = colorArray.length - 1;
int y = 0;

while(x >= 0){
    int colHeight = colorArray[x].length;
    for (int i = y; i < colHeight; i++){
        colorArray[x][i] = true;
        gui.update(colorArray);
    }
    x--;
    y++;
}

答案 1 :(得分:0)

这是我做的:

package com.company;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {

        boolean[][] arr = new boolean[4][4];


        // we go from main diagonal and set each element on it to true as well as each element after it
        for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
            for (int k = j; k < arr[i].length; k++) {
                arr[i][k] = true;
            }
        }


        // print out result of changing main diagonal and elements below to true
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.printf("%5b ", arr[i][j]);
            }
            System.out.println();
        }
    }
 }

第一个循环对你来说很重要,坐下来试图弄清楚会发生什么。

输出:

false false false true

false false true true

false true true true

true true true true

答案 2 :(得分:0)

r遍历行索引。 i遍历列索引。

随着行索引的增加,列索引应该会下降。 因为, 当你走下去时,你想要绘制更宽更宽的部分。 与r + 1一样宽。

我认为如果列索引从0到r,并且从右到左绘制单元格,逻辑将更容易理解。

int min = Math.min(colorArray.length, colorArray[0].length);

for (int r = 0; r < min; r++) {
    char[] row = colorArray[r + Math.max(0, colorArray.length - min)];
    for (int i = 0; i <= r; i++) {
        row[row.length - 1 - i] = true;
        gui.update(colorArray);
    }
}