簡體   English   中英

循環遍歷2D數組中的主對角線(/)及其下方的單元格

[英]Loop through main diagonal (/) as well as the cells underneath it in a 2D 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

這是我在此處的第一篇文章之一,因此,如果我的問題需要更多的說明和編輯,請告訴我。

我的假設是(0,0)是左上角。 因此,您想從右上角的(max,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++;
}

這是我所做的:

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

首先循環對您來說很重要,請坐下並嘗試找出會發生什么。

輸出:

假假假

假假真真

真真真

真實真實真實真實

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

暫無
暫無

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

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