[英]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.